LuneScript のこれからの予定
今月上旬に TypeScriptToLua の存在を知ったことで、 「Lua のトランスコンパイラ」という LuneScript の主な 存在意義 がほとんど消えてしまいました。
それによって LuneScript 開発に対するモチベーションが一気に下りましたが、 よくよく考えてみれば、今迄も自分以外の誰かが使っていた訳でもないし、 独自言語開発は元々自分がやりたかったこと でもあるので、 TypeScriptToLua があろうとなかろうと 今迄と然程違いはないんじゃないか、 という結論になりました。
そんな訳で、LuneScript は自分の検討用プログラミング言語として 今後も開発を継続 していく予定です。 特に go との連携機能に注力します。
今迄は自分以外のユーザ環境でも使いやすくなるように 多少なりとも考えていましたが、 Lua のトランスコンパイラに TypeScriptToLua ではなく LuneScript を使おうという人はほとんどいないと思うので、 今後は自分特化になります。 ということで、先月末は LSP の対応を進めようと思っていましたが、 別のことを優先します。
既に LSP 対応をやめて トランスコンパイル時間の高速化に着手し、 従来と比べて 1157 パーセントの改善を実現しています。
高速化の詳細は過去記事を参照。
安全な非同期化処理
今回の高速化の実現手段として、 go へのトランスコンパイラ時に 非同期化処理を安全に実現(コンパイラレベルでデータの競合アクセスを排除)する方法を 実験的に対応しました。
この 「安全な非同期化処理」 は、予想以上に効果を発揮し、 今回の非同期化対応のコード修正を完了して動かした際には、 驚くほどすんなりと何のエラーもなく並列化して動かすことができました。 46KLine (go 変換後は77KLine) のプログラムを非同期化して、 一発でまともに動くのは結構凄いことじゃないでしょうか?(自画自賛)
なお、従来のシングルスレッド処理の非同期化には、 非同期化対応の文法エラーが発生するので、 そのエラーを逐次対応する必要があります。
これには、そこそこ時間が掛りましたが、 非同期処理にありがちな実行時の不具合に悩まされるよりは、 コンパイルエラーの方がよほど効率が良いです。
特に syntax の論理的なエラーなので、コンパイラにバグがない限りは、 非同期処理における危険な箇所を抜け漏れなく解決できる、 というのはとても楽だし安全です。
こういうことを実現できるのが、自分用の独自言語を持つ大きなメリットの一つです。
ちなみに、 LuneScript の非同期処理に関しては、 まだ検討段階であり、 syntax エラー検出にバグもあるので、リファレンスに公開するのは、 もう少し先になります。
非同期処理を使用しないケースでは、基本的には影響のないものになっています。