前にも書いた、cc4vというV言語用のクリエイティブコーディング・フレームワークを、Odinに移植した。
https://github.com/cc4v/odin-cc
https://github.com/cc4v/odin-cc-examples
V言語の時点でも十分だったのだけれど、Odinに移植したことで、
- RustやC++のようなGCなし言語で動作
- Metal/DX12/(Vulkan)/GL などの描画フレームワークの上で動作 (sokol-odinの恩恵)
- Processingライクな記法で、簡単さ、シンプルさを重要視
- GL風 (GL互換) のレイヤーを持っていて、GLの知識を使っての描画ができる (Sokol GLの恩恵)
という特徴を実現することができた。もしGCが欲しい場合はV言語版を選択することができるし、Ebitengineにかなりインスパイアされていて、OdinやV言語自体、Go言語との類似性が高いので、Go言語やEbitenが好きな人にとっては好ましいフレームワークになっているように思う。
元々cc4vを作ったときは gg というSokolラッパーが存在していたことで実現に踏み切れたのだけれど、そのときにggのソースコードを読みふけったことでSokolの知識が増えて、それが今回のSokol実装に繋がった。(完全に gg の内容をポートできているわけではないので、依然V言語版の方が使いやすくはあるがベースは同じ。)
現状では、OdinやSokolを知っている人にしか魅力が伝わらないものになっているし、原石というか本当にベースを作ったに過ぎないので、ここからより魅力的なフレームワークにしていきたいと思っている。
ぶっちゃけ、V言語実装をしたとき、V言語はちょっと辛い部分があるなと感じて少し足踏みしていたのだけれど、今回Odin言語を書き始めたことが、自分自身にとって魅力の再発見に繋がったし、改めてOdin言語の楽しさを確認できる機会となった。
Odin言語の高い可読性と、スクリプト言語並に楽しいのにもかかわらずC言語やZigと同等の低レイヤー操作ができる強力さには、本当に感動を覚える。もしRust言語で書いていたら、それはそれで楽しい部分はあったにせよ、難解なエラーメッセージで辟易して書くのをやめていたかもしれない。
次の目標: GVの移植
前も同じことを書いたけど、v-gvvideo をOdinに移植していきたい。これが初めてのアドオンということになるだろうし、V言語/ggでの動作実績から、おそらく移植はそう苦ではないと思われる。
長期目標: C言語実装 (C-ABI実装)
また、長期目標として、Sokol上で今回実装できたことによって、C言語実装を行うことも可能になった。というか、OdinからC-ABIのdllを出力することはでき、OdinはC同様にGCがない言語なので、これによって何言語からも利用できる基盤ができることになれば嬉しいなと思う。
BevyなどのフレームワークがRust言語以外で利用できるといいのだろうなと思いながらもなかなか実現しないので、Godotのように、いろんな言語から利用できる裾野はいつか広げておきたいなと思う。(現状でも問題なくビルドして利用できるはずだけれど、いつかきちんとやりたい。)