jankに一所懸命向き合って、だいぶ疲れたので早く寝たいのだけれど、興奮冷めあらぬ感じなので、少し文章にまとめて落ち着いてから寝よう。
Clojurians Slackの#jank チャンネルにも投稿したのだけれど、Raylib、SDL3、TrussCと次々とバインディングが成功した。
- https://github.com/funatsufumiya/jank-raylib-test
- https://github.com/funatsufumiya/jank-sdl3-test
- https://github.com/funatsufumiya/jank-trussc-test
きっかけはSDL3が無事に動いたことが大きくて、シンプルなC++ヘッダとdllがあれば動作するということがわかったのと、clang-repl がバックエンドで動いていることで、JITエラー(Symbol not found エラー)が主にclang-replの出力だとわかってからは、AIにもその情報を伝えることによって格段にデバッグが進んだ。
clang-replと向き合うことと、jankの大きなヘッダによる名前被りや、あと静的ライブラリは基本的に使えないという制限、jankですでに動作しているC++の部分があるのでマクロ (define) が動いたり動かなかったりするなど、結構いろんなノウハウがあるのだけれど、jankバインディングの基本スタイルとしては、一つcmakeプロジェクトを作ってそちらでdllを出力させ、それをできるだけ小さなヘッダにより呼び出すという、動的言語としては普通のスタイルがやっぱりしっくりくるとわかった。
一度きちんとdllを呼び出すことができたら、あとはjankの真骨頂であるC++/LLVMのバインディングレスの動的呼び出しが強力に威力を発揮するので楽。
これで、自分のClojureネイティブを使う夢は、もうほぼほぼ形になって、Win/Mac/LinuxでClojureネイティブでゲームライブラリなどを動作させる基盤はもう整った。こんなに早く夢が叶うとは、jankコミュニティと開発者のJeaye Wilkersonさんには、本当に感謝しかない。
夢をあきらめないで本当によかった。