NYAGOS 4.0.0_0 リリース記念!
ユーザから見えるもの
Unicode 対応
NYAOS 3.x は Double Byte Charactor System を前提にしており、仕組み的に UTF8 などのUnicode をサポートできなかった。
NYAGOS 4.x は Go 言語の機能を通じて、Unicode をサポートしている。
- 現在のコードページにないUnicode 文字列をペーストできる
- %U+XXXX% といった形式で間接的に記載することが出来る(コマンドに引き渡される際に置換される)
- Cygwin と同様に ls や、リダイレクト先等に Unicodeファイル名を用いることが出来る。
- Lua で扱う文字列のデフォルトは UTF8。UTF8⇔現在のコードページの文字コードに相互変換関数もある。
環境変数定義用バッチファイルも読み込める source 文
- (2018.08.22)
- 4.2.5 で、CMD.EXEと同様に、特にsource文など使わずとも、自動でバッチファイルでの環境変数の修正を取り込むようになりました。従来どおり source 文を使う時だけ環境変数を取り込みたい場合は「`nyagos.option.usesource=false`」を設定します
- alias 文
- 関数機能 (関数名{ … })
- Lua 関数
- CMD.EXE のバッチファイルの文法
- NYAOS 3.x の独自文法(foreach 等)
- Lua 5.2
- 外部コマンド・内蔵コマンドで、同じことをする、別のコードを用意
- 字句解析を何回も何回もやり直しているコードがある。
NYAOS 3.x の source 文は独自文法の環境設定ファイルを読み込めるだけで、環境変数などを設定するバッチファイルを読もうとすると、別途用意した Lua スクリプト(cmdsource.lua)を用いる必要があった。
NYAGOS 4.x の source 文は、最初から cmdsource 相当となっている。また、source のエイリアスとして「.
」(ドット一つ)も使える。
キーフックがシンプル
NYAOS 3.x では、一行編集時のキーのフックが全てのキーに対して一つであったため、独自機能をキーに割り当てる際、差し替えが煩雑になりがちだった。
NYAGOS 4.x では
nyagos.bindkey('C-c',function(this)~end)
いう形で、キー個別にフックをかけることができるため、シンプルに作成できる。
自動ワイルドカード展開の廃止
UNIX的なワイルドカード展開は便利だが、Windowsでは自前でワイルドカードを展開することを前提にしたコマンドも多く、それらの誤動作を防ぐため、バッドノウハウを駆使する必要があった。
NYAGOS 4.x ではワイルドカード展開は勝手に行わず、必要に応じてエイリアスなどで組み込めるよう、Lua向け支援関数を用意するだけにとどめた。
重複機能の削除
コマンド定義
NYAOS 3.x では
と三種類もあった。NYAGOS では Lua による
nyagos.alias("コマンド名", ~ )
に統合した。~に置く引数には、置換されるコマンドライン文字列か、あるいは function(args) … end
句が使える。
独自文法
NYAOS 3.x では
と3種類もあった。NYAGOS では独自文法は極力廃止した。
開発上のこと
独自コンテナライブラリの廃止
NYAOS 3.x は NYAOS 2.x 時代の DOS / Windows 等の 16bit 環境のサポートのため、省メモリ志向の独自のコンテナライブラリを使用しており、STL など広く知られたライブラリを使っていなかった。
NYAGOS では Go 言語標準のライブラリを使用しているので、第三者が予備知識なしに修正するのがより容易になった。
CMD.EXEのラッパー時代に出来た歪な構造から脱却
NYAOS は最初パイプラインを実現するのに、COMMAND.COM / CMD.EXE に頼っていた為
といった歪なコードが含まれていた。その後、CMD.EXEなしにスタンドアローンで動作するように改造されたものに、内部構造にはその名残りがかなり色濃く残っていた。
NYAGOS は最初から自前でほぼ全てを行うようにしているため、このような歪さはない。
GNU General Public License から New BSD License へ
GPL も嫌いやないけど、嫌う人もいるからね
正直、すまんかった
mruby 断念
(説明が長くなるので詳細は省くが)タイミングが悪かったんや…としか言いようがない。でも、Lua も結構ええやろ?
あんまり、移行メリットないね
これから増やすよ!