ディスカッション (8件)
「Let-go」は、純粋なGoで記述されたClojureライクな言語です。JVM版Clojureと約90%の互換性を持ち、約10MBの静的バイナリとして提供され、コールドブートはわずか7ms。これはJVMと比較して約50倍、Babashkaよりも3倍高速です。アルゴリズム計算の処理能力も申し分なく、GraalVMベースのsciに匹敵するパフォーマンスを誇ります。元々は2021年に「Goを書いているフリをしてClojureを書きたい」という悪ふざけから始まったプロジェクトでしたが、いざ作ってみると非常に実用的になりました。本物のClojureのような書き心地で、nREPLサーバーを内蔵しており(CalvaやCIDERからも利用可能)、Goプログラムへの埋め込みも簡単です(関数、構造体、チャネルの境界を越えた連携もスムーズ)。CLIツール、Webサーバー、データ処理スクリプト、さらにはシステムプログラミングにも適しており、実際にデモンレスなコンテナランタイムをこれで作成しました。ちなみに、Plan9でも動作します。内部構造としては、Clojureライクなコードを実行するために手作りされたシンプルなコンパイラとスタックVMを採用しています。コンパイラはAOT(Ahead-of-Time)モードで動作し、ポータブルなバイトコードブロブや、ランタイムを含めたスタンドアロンバイナリを生成可能です。ただし、これは既存のClojureプロジェクトをそのまま動かせる完全な代替品ではありません。現状ではJARの読み込みやJava APIの全サポートはしておらず、プロジェクトの修正なしでそのまま動かすことは難しい点にご留意ください。ぜひ一度触ってみて、感想を聞かせてください。IssueやPRもお待ちしています!
libcがどれだけ速くVMにmmap()されて、最初の命令が実行されるか見てみるといいよ :)
こういうClojureの移植版をずっと探してたんだ。Goのコアライブラリとチャネルの抽象化が、よりシンプルで優れたベースAPIを提供してくれるんじゃないかって思ってたから。コアと非同期APIとの相性も良さそうだし(それに、単一のバイナリという僕の好みの要件も満たしてくれるしね)。
開発お疲れ様。今ハマり直してるC++(26)が一段落したら、必ずまたチェックするよ。
追記 なんで今までGlojureの存在に気づかなかったんだろ、見た感じ素晴らしいプロジェクトだね。
このWasmブラウザREPLを試してみてよ https://gloathub.org/repl/ (https://gloathub.org/repl/)
GloatはGlojureのAOT自動化ツールだよ。
去年の夏にJames HamlinとGlojureのAOT対応を進めて、それ以来ずっと開発を続けてる。marcingas (nooga)とも協力して、Gloat/Glojure/let-goが連携できるように取り組んでるところ。
明らかにバイブス重視だね
AIが生成した雑なREADMEを読むのはもううんざり。自分のプロジェクトなんだから、もう少し誇りを持ってよ。AIに機能を羅列させるんじゃなくて、なぜそのプロジェクトが良いのかをサクッと教えてほしい。本当に退屈だし、敬遠したくなるよ。