最近、普段遣いの言語としてNimやHaxeへの探求を再開している。元々はC3という言語を知ってワクワクしていたのだけれど、改めてスマートポインタなどがない環境で自分がやっていけるかがやや不安になった。まぁ参照カウントを手製でつければいいといえばいいのだけれど、前からずっと期待していたNimがもう2.2.0になっていることを考えて、そろそろNimを本格的に使っていってもいいのではないかという期待感もある。
Nimを本格的に使うとすれば、不安なのはバイナリサイズか。Cを出力するトランスパイル言語であるために、GCまで内包するとなると、出力するバイナリのサイズが大きくなることが予想される。
そもそも自分の理想とする言語を一度明言化しておくと、
- できるだけ普通の言語で、新しい人が参加したときに障壁が少ない
- メモリ管理は手動でもでき自動でもできると理想。C++のスマートポインタくらいのバランス感覚が良い。
- 目的遂行のために、余計なことを考えなくて済むほうが良い。例えば過剰にメモリやポインタなどの実装のことを気にしなければならなかったり、表現力に制限があったり、実装したは良いものの速度が遅かったり、Stop-the-worldのGCに悩まされたりすると辛い。
この基準だと、RustやC++は少し辛い。Zigは実装を気にしなければならなすぎる点が気になる。Pythonなどは実装したものが速度が遅すぎたりすることが度々ある。
その点、例えばGodotのように、普段はGDScriptなどのスクリプトを書いておいて、最適化やハードの連携が必要な部分だけをC++で書くという棲み分けは結構好みだったりする。この両者を1つの言語で書ければという理想が常にある。
C#でも良いのだけれど、クロスプラットフォームでGUIが書けたりするような部分に少し不安がある。MAUIなどがあることは理解はしているけれど、いざとなったらC++などとブリッジしなければならないかもしれないことを考えると、少し躊躇してしまうし、今のクロスプラットフォームの流れが続くかどうかがMicrosoftに委ねられているというのはあまり良い気持ちはしない。
そうなってくると選択肢はHaxeやNimになってくるのだけれど、Haxeは過去に使った経験からどうしてもオーバーヘッドが気になる。それに比べるとNimはオーバーヘッドが少なそうではあるし、ターゲット言語が限られているのでC++ interopなどが強そうなのは利点に思える。
あとはWrenなどのスクリプト言語をC++と連携させるというのも手ではあるし、Luaを真剣に使おうと思っていた時期もあるけれど、Luaは表現力的な部分と自分の思考に今ひとつマッチしない部分があって長く続かなかった(たまに書くことはある)。なので、スクリプト言語とバインディングするくらいなら、一つの言語で書ければというところはある。
・・・こうやって書いていれば多少思考が整理されるかと思ったのだけれど、結局とりとめがない感じになってしまった。たぶん、Nimに関する知識と経験が不足しすぎているので、もう少し手になじませてから、考えてみたほうがいいかもしれない。
V言語のautofreeが正式版になればV言語を検討してもよさそうな気もするし、Valeももう少し安定すればとも思うけれど、この辺はまだ数年は様子見かな。