3P by GN⁺ 11일전 | ★ favorite | 댓글 1개
  • Racket 9.0은 병렬 스레드(Parallel Threads)를 도입한 주요 릴리스로, 기존의 그린 스레드와 futures, places 지원을 확장한 형태
  • 새 스레드는 #:pool 인자로 생성할 수 있으며, #:keep 'results 설정 시 thread-wait로 결과를 나중에 조회 가능
  • black-box 래퍼는 최적화 컴파일러가 특정 연산을 제거하지 않도록 방지해 벤치마크 정확도를 높임
  • decompile-linklet 함수는 링크렛(linklet)을 다시 S-식으로 변환할 수 있으며, processor-count 는 병렬 수를 반환하도록 변경
  • AArch64용 “natipkg” 패키지, Weibull 분포 추가, 문서 개선 등 다양한 업데이트 포함

Racket 9.0 주요 변경 사항

  • 이번 릴리스에서 병렬 스레드(Parallel Threads) 기능이 새로 도입됨

    • Racket은 기존에 그린 스레드, futures, places를 지원했으나 병렬 스레드는 주요 확장 기능로 추가됨
    • 병렬 스레드는 #:pool 인자를 통해 생성 가능하며, #:keep 'results로 설정 시 thread-wait를 통해 결과를 나중에 조회 가능
  • black-box 래퍼는 최적화 컴파일러가 특정 계산을 완전히 제거하지 않도록 방지

    • 벤치마크 수행 시 정확한 성능 측정을 보장하는 데 유용함
  • decompile-linklet 함수는 링크렛(linklet)을 다시 S-식(s-expression) 으로 매핑 가능

    • 코드 분석 및 디버깅 시 내부 표현을 복원할 수 있는 기능 제공
  • BC Racket에서 processor-count 함수가 항상 병렬 프로세서 수를 반환하도록 변경

    • 병렬 실행 환경에서 일관된 프로세서 수 확인 가능
  • AArch64용 “natipkg” 패키지가 새로 배포되어 패키지 빌드 및 테스트 인프라에 활용 가능

추가 개선 사항

  • Check Syntax 기능이 구문 객체의 “origin” 필드 내 더 깊이 중첩된 식별자 추적 지원
  • math 라이브러리Weibull 분포 추가
  • 다수의 버그 수정 및 문서 개선 포함

커뮤니티 및 참여 안내

  • 이번 릴리스에는 Alexander Shopov, Bogdan Popa, Matthew Flatt, Matthias Felleisen 등 여러 개발자가 기여
  • Racket은 커뮤니티 기반 오픈소스 프로젝트로, 신규 기여자를 환영

피드백 및 홍보 요청

Hacker News 의견
  • 이번 소식의 핵심은 Racket이 이제 병렬 스레드를 지원하게 된 것임
    예전에도 places 같은 병렬화 방법이 있었지만, 이번 방식은 훨씬 가볍고 익숙함
    Racket으로 뭔가를 만드는 걸 좋아하기 때문에, 이로 인해 Racket의 활용 영역이 넓어지는 건 반가운 일임

    • 릴리스 노트를 읽으면서 나도 놀랐음. 드디어 이런 형태의 멀티스레딩이 들어갔다는 게 반가움
      places는 유연하지 못했음. 람다를 쉽게 전달할 수 없고, serializable-lambda가 전염성 있게 작동해서 실행 시점에는 함수가 아니라 데이터만 보낼 수 있었음
      그래서 여러 place에 작업을 분산시키는 구조를 만들기 어려웠음
      이번 새로운 동시성 기능으로는 그게 가능해지길 바람
      그동안은 이런 이유로 Racket 대신 GNU Guile을 써왔음. Guile은 futures나 fibers를 통해 멀티코어 활용이 훨씬 안정적이었음
      나도 futures를 이용해 병렬 의사결정 트리 모델을 만들어봤는데 거의 선형적인 속도 향상을 얻었음
    • 어떤 종류의 프로젝트를 Racket으로 만드는지 궁금함
      나는 Clojure 개발자라 Lisp 계열을 좋아함. Racket으로는 어떤 걸 만드는지 알고 싶음
    • 버전 9에서야 병렬 스레드가 추가된 건, 홈페이지에서 Racket을 “성숙하고 다듬어진 언어”라고 소개하는 것과 좀 모순된다고 느낌
  • 이 영상을 보면, Racket은 첫 언어가 아니라면 어렵게 느껴질 수 있지만, 아이들도 배울 수 있을 만큼 쉬운 언어임

    • 정말 멋진 영상임
  • 나는 Racket을 정말 좋아함
    재미로 Racket 관련 책을 썼고, 온라인에서 무료로 읽을 수 있음
    Scheme 계열 언어 중에서는 Racket과 Gerbil을 추천함
    Racket은 IDE가 좋고 표준 및 서드파티 라이브러리가 풍부해서 초보자에게 적합하고, Gerbil은 시스템 프로그래밍이나 네트워크 유틸리티에 좋음

  • Racket은 정말 멋진 언어임
    배우기 좋은 Lisp 계열이고, DrRacket IDE로 과제를 하던 추억이 아직도 남아 있음

  • 나는 80년대 중반에 처음 Lisp을 실험해봤고, 이후에도 새로운 사고방식과 프로그래밍 기법을 배우기 위해 종종 돌아오곤 했음
    Racket도 여러 번 시도했지만, 뭔가 소프트웨어 자체가 나와 맞지 않았음
    꾸준히 써보면 괜찮을지도 모르겠지만, 큰 프로젝트를 Racket으로 작성하는 건 아직 상상이 안 됨

    • 예전엔 좋아했지만, 코드가 너무 느리고 무거워서 떠났음
      Python보다도 느렸고, Chez Scheme으로 재작성된 이후엔 개선됐을지도 모르지만, 지금은 빠르고 가벼운 Common Lisp을 씀
    • “소프트웨어”라고 할 때 언어 자체를 말하는 건지, 아니면 툴링을 말하는 건지 궁금함
  • Racket을 알게 된 건 John Carmack이 10년 전 Oculus 관련 작업을 Racket으로 했다는 걸 보고였음
    관련 영상

    • 참고로 HN은 Arc로 작성되었고, Arc는 Racket으로 만들어졌음
      Arc 위키 문서
  • Lisp은 그 자체로 메타 언어이고, Racket은 그보다 더 메타함
    사실상 언어 제작 키트라고 할 수 있음

    • 이런 말을 자주 들었지만, 실제로 Racket으로 언어를 만드는 PL 개발자는 많지 않음
      내가 PL 수업을 가르칠 때 Racket을 써봤는데, 학생들은 Java나 Python에 익숙해서 Lisp 문법에 어려움을 겪었음
      그래서 Racket이 정확히 누구를 위한 언어인지 잘 모르겠음
  • Bogdan Popa의 블로그(defn.io)에는 Racket 관련 흥미로운 정보가 많음
    새 스레딩 기능을 직접 써보길 기대 중임

  • Racket을 몇 번 시도해봤지만, IDE가 너무 직관적이지 않고 어색했음
    이게 의도된 디자인인지, 아니면 단순히 더 나은 대안이 없어서 그런 건지 궁금함

    • IDE는 언어 그 자체가 아님
      Racket은 VSCode(Magic Racket, Langserver), Emacs(Racket Mode), Vim 등에서도 잘 지원됨
      공식 문서Langserver 저장소를 참고할 수 있음
      DrRacket에는 다른 IDE에 없는 매크로 스테퍼 같은 기능이 있어서 여전히 쓸 만함
    • racket-mode.com에서 아주 훌륭한 Emacs 통합을 확인할 수 있음
  • Racket은 재밌는 언어임
    우리 대학에서는 1학년 CS 수업에서 Racket의 교육용 버전을 사용함
    어떤 학생은 싫어하지만, 조용히 좋아하는 사람도 있음

    • 그 수업 이름이 뭐였는지 궁금함
    • 하지만 대부분은 졸업 후에는 다시는 Racket을 쓰지 않겠다고 함, 그게 꽤 의미심장함