nmoshとは何か
をmoshに移植した物。
前提
moshの一部分はmosh自身のSchemeで書かれている。たとえばキャッシュの制御とか、VM命令へのコンパイラのようなコアにまつわる物など。
このうち、R6RSのマクロとライブラリに関する部分(expander)は、従来、psyntaxと呼ばれる物(Ikarusの一部)をhigeponが移植して使っていた。
ypsilonはpsyntaxだったが自前の実装に移行した(Shibuya.lisp TT #2 http://www.youtube.com/watch?v=FPsjXt9MytI )。
moshはIkarus以外としてpsyntaxを採用しているが、psyntaxそのものがそれなりに複雑で(少なくとも僕にとって)メンテナンス性に難が有った。そこでよりシンプルな↑をmoshに移植し、ライブラリキャッシュなどの機能を追加した。これは当初SRFI-72のリファレンス実装として公開されていたもので、R6RSをフルサポートするようにそれなりに拡張されている。同じ実装はLarcenyがR6RSモードとして利用しており、他にGambit-R6RS( http://smyles.com/projects/r6gambit/ )も同様。
平たく言えば、moshそれ自身ではR5RSのサブセットと、R6RSの多くの手続きしか実行出来ない(mosh -5で起動した状態)。expanderは、R6RSスクリプトを読み取って、mosh -5で実行できるようなschemeスクリプトに変換する役割を持つ。
メリット
デメリット
- (expandが)遅い。
- (expandされたコードが)遅い。
- 非互換性がある
tips
- しばらくはmoshと一緒にnmoshもインストールされる。moshが従来のpsyntaxによるmoshで、nmoshがこの実装。
- nmoshはキャッシュを~/.nmosh-cacheに作るので、上手く動かないときは消す。(これはリリースまでに解決したい。。)
- ライブラリのキャッシュだけをしたいときはREPLでimportする。
nmoshの名前はnon-prefixed moshの略で、当初はアプリケーション組み込み用のmoshとして考えていた。もちろん、psyntax mosh(pmosh)と比べて、pMOSとnMOSの関係から連想されるようにしている。cmoshが出るかどうかは現時点では未定。