見出し画像

プログラミング言語の違いは実装のしやすさと密接に関わる

Python、AutoHotkey、Zscriptを使ってZbrushプラグインを作る挑戦中。そしてZbrushプラグイン開発で一番足を引っ張っているのがまさかのZscriptというオチだった日記。今日も短めにGo。

3言語を使って1つのソフトを作る上で一番問題になったのが変数の受け渡し。これ、1つの言語内ならばメモリ内の変数の受け渡しだけに気を付ければ万事解決。だが他言語ではそうはいかない。ここが1つめの罠。どうやって情報を受け渡すか。

1つの変数を受け渡すのにも2つの情報がある。変数名と、その値。Python学習者ならピンときたはず、辞書型のKeyとValueの話だ。そしてさらにピンとくるのが、これを外部ファイルで渡すならばJSONがいい、ってことね。ここまでは普通。Python初心者でもピンとくる。

幸いWindowsの場合ならCOMオブジェクトという初耳な仕組みを使えばAutoHotkeyでも無事にJSONファイルの読み書きができるらしい。さすがAutoHotkeyはできる子だ。(かつてはAutoHotkeyのみでJSONの読み書きプロジェクトがあったらしいが、更新が8年前だったり、GPL v3.0だったりと私的には採用できない。)

だがZscriptは絶望的だった😱 Basic的なアプローチしかない。なので当然JSONを読み書きできない。そして最初のヒント「変数情報には2つの情報がある。KeyとValueだ」そう、Basic的なアプローチだとValueは受け取れる。だがKeyは動的に受け取ることができない。ソース内で変数名を決め打ちしておかないといけない。

Python:O、AutoHotkey:O、Zscript:×。

いきなり不利だ。まぁ分かってはいたけれど。これはまぁ変数の並び順で情報を区切れば、仕様としては疑似的にJSON扱いはできる。要するにKeyとValueが1対1になっていれば問題ないわけで。

次、実行形式。Pythonはご存じインタプリンタなのでコンパイルなしでもいきなり実行できる。上から1行ずつ実行。ちまちましているが分かりやすい。ランタイムエラーになるまでは順次進む。AutoHotkeyもインタプリンタ型で、構文エラーが無ければ即実行が始まる。

だがZscriptはコンパイル型。一度zscに変換しないと実行されない。1文字変えてもコンパイルからの実行の無限ループ。地味にボディーブローのように効いてくる。メンタルが削られる。

また開発環境のフォルダ構築場所がZbrushの場所に依存する。なので自由なフォルダ場所で開発を展開できない。Zscriptオンリーの時は「しょうがない」と思っていたが、PythonやAutoHotkeyで自由に開発できるようになってからのZscriptの縛りのきつさ。うん、キツいですね。

そして使える関数の少なさ。これは圧倒的にZscript不利。Pythonは当然幅広いし、AutoHotkeyも結構色んな関数がある。だがZscriptは……。厳しいね。PythonやAutoHotkeyが1行実装で済むところを、2つ3つの関数を組み合わせて値をグルグル回してようやく辿り着くことが多い。しんどい。

ここまででもやっぱり、

Python:O、AutoHotkey:O、Zscript:×。

つまりZbrushプラグイン開発ではZscriptが一番足を引っ張っている。悲しいオチである。もうZbrushのUI制御専用関数としてしかZscriptを使わない実装にせざるを得ない。それでもかなりの罠に今回も引っかかった。客観的に見てもプログラミング言語としての違いがあまりにも圧倒的に違いすぎる。

そういう現実を再認識した。

とりあえず足を引っ張るZscriptをカバーするために、JSON形式の情報を何とかValueだけにしてZscriptにインポートできるような自作関数の実装とファイル形式の準備が必要。これをやっておかないと今後何往復も現れる変数のやりとりの処理で詰む。

Zbrushプラグインのリファクタリングで一番手間がかかるのは実はZscriptとの連携周りかも知れない。ここでもまた。。。


今日は疲れた。


今回の創作活動は約45分(累積 約3,867時間)
(1,115回目のnote更新)


読んでくれてありがとう。気長にマイペースに書いてます。この出会いに感謝😊