Racket v9.0
(blog.racket-lang.org)- 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 は コミュニティ主導のオープンソースプロジェクト であり、新規コントリビューターを歓迎
- 参加方法は racket/README.md で確認可能
フィードバックと告知のお願い
- 質問や議論は Racket Discourse または Discord コミュニティで可能
- ユーザーや各プラットフォームのパッケージ管理者にリリース情報を共有することを推奨
1件のコメント
Hacker Newsのコメント
今回のニュースの核心は、Racketがついに並列スレッドをサポートするようになったこと
以前からも places のような並列化手法はあったが、今回の方式はずっと軽量でなじみやすい
Racketで何かを作るのが好きなので、これによってRacketの活用範囲が広がるのはうれしい
places は柔軟性に欠けていた。ラムダを簡単に渡せず、serializable-lambda が伝染的に働くせいで、実行時には関数ではなくデータしか送れなかった
そのため、複数の place に作業を分散させる構造を作るのが難しかった
今回の新しい並行機能でそれが可能になることを期待している
これまではこうした理由でRacketの代わりにGNU Guileを使ってきた。Guileは futures や fibers を通じてマルチコア活用がずっと安定していた
私も futures を使って並列意思決定木モデルを作ってみたが、ほぼ線形の速度向上が得られた
私はClojure開発者なのでLisp系が好きだ。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でやっていたのを見たからだった
関連動画
ArcのWikipedia記事
Lispはそれ自体がメタ言語であり、Racketはさらにメタだ
実質的には言語制作キットと言える
私がPLの授業を教えたときにRacketを使ってみたが、学生たちはJavaやPythonに慣れていてLisp構文に苦労していた
そのため、Racketがいったい誰のための言語なのかよく分からない
Bogdan Popaのブログ(defn.io)にはRacket関連の興味深い情報がたくさんある
新しいスレッディング機能を自分で使ってみるのが楽しみだ
Racketを何度か試したが、IDEがあまりに直感的でなくぎこちないと感じた
これが意図された設計なのか、それとも単により良い代替がないだけなのか気になる
RacketはVSCode(Magic Racket, Langserver)、Emacs(Racket Mode)、Vimなどでもしっかりサポートされている
公式ドキュメント と Langserverリポジトリ を参照できる
DrRacketには他のIDEにないマクロステッパーのような機能があり、今でも十分使う価値がある
Racketは面白い言語だ
私たちの大学では1年生のCS授業でRacketの教育向けバージョンを使っている
嫌う学生もいるが、静かに気に入っている人もいる