Nihongo Yet Another GOing Shell についての駄文です。関心ある方に読んでいただければと
現在
- 4.1.x になって、パイプライン× Lua の組み合わせでのクラッシュ問題は解消した。
- 原因は複数の goroutine をまたがって、一つの Lua インスタンスを参照していたため
- goroutine ごとに別途 Lua インスタンスを作ることで解消したが、各インスタンス間でデータを共有するのに「
share[]
」 というLuaテーブルしか使えず、ユーザに不便を強いている- 残念ながら、この不便さを解消する方策はない。Luaにインスタンスをクローンするメソッドがあればよいのだが、UNIXだと OS に fork があるので、Windows のためだけに実装される可能性はまずない。
- 不安定な 4.0.9 がまだ使われているところがあるのが遺憾
- 二重引用符や、% などの処理のせいで、一行 gawk が通らない不具合が予想以上に多かった。
- bash との互換性が無いからといって使わない人は相変わらず多い
- 目指すところが違うので、これは無視してよい(昔からある話)
-
NYAGOS は「Luaでしかカスタマイズできない」ので、使う敷居が高くなっている
- 誰もが Lua でガリガリチューニングしたいわけではなく、単にエイリアスとか環境変数の設定ができれば十分という人も多い
- NYAOS ではバッチ風設定ファイル(
~/_nya
)と Lua で機能が重複していたため、重複機能を無くす意味でバッチ風設定ファイルは実装しなかったが、間違いだった。
- NYAOS 2.x の頃は「実行ファイル一つ、設定ファイル一つ」で運用できた。NYAOS 3 の途中からファイル数がやたら増えてしまい、運用性が下がった。
- 文字コードで UTF8 と CP932 が混じってしまっているのが頭が痛いが、どうしようもないところがある(たとえば pwd はコンソールに出す分には UTF16 のAPIにつっこまれるので問題ないが、more を通すと UTF8 が ANSI-API に入ってしまい、文字化けしてしまう)
- ユーザカスタマイズ以外での Lua の採用メリットは減っている。C言語で開発していた NYAOS 3.x では一部のコマンドを Lua で提供するのは開発効率もよかったが、Go言語はC言語に比べてもともと開発効率がよいので、Goで書けるものを Lua で提供する意味は少なくなっている。
- NYAOS 3.x → NYAGOS 4.x みたいに「一から作り直さないとどうしようもない」といった問題は今のところないので、今後 5.x を作る必要性は基本的に無い
- NYAOS 3.x は Double Byte Character System が大前提だったので、1文字3バイト上が普通にある UTF8 対応はほとんど不可能だった。
- NYAOS 3.x の Lua と NYAGOS 4.x の Lua で互換性がないのが問題になっているケースもあった。これはどう対応するか、まだ検討中(今のところ対応しない方針だが)
今後
- 一行gawkがエラーになり気味なのは、問題を確認次第、地道に直してゆく
- 二重引用符の中に二重引用符を書くときは
gawk "BEGIN{ print substr(""%01"",2) }"
みたいに二重引用符を二つ連続して書いてください
- 二重引用符の中に二重引用符を書くときは
- バッチ風設定ファイルを復活させる(
~/_nyagos
)- IF文などの制御構文は NYAOS 3.x 風ではなく、CMD.EXE の文法に近づける方向で
-
nyagos.d/
などの Luaライブラリなどは go-bindata で EXE 内に内蔵する or Go でカリカリに書くなどして、数を減らす - lua53.dll がない時、全機能が使えないのは仕方ないにしても、一応、必要最小限の動作くらいは出来るようにする(今は panic になる)
- interface 構文など使って、パッケージの相互依存性などを排してゆく
- もう少し Qiita で発信する
ペースは落ちていますが、本年はまだまだ改良を続けて参りますので、不具合を見つけたり、リクエスト・提案がある方は GitHub へ issue 立ててください(日本語でも英語でも、どっちゃでもいいです)
以上、よろしくお願いいたします。