週刊mosh - nmosh Nのひみつ

Homebrewのmoshも0.2.7になりました。

最近はGuileも収録されているので唯一では無いですが、コマンド一発で導入できるR6RS Schemeとしてはまだレアな存在です。

今週はトピックがないので、

nmosh Nのひみつ:

  • 0. 配布物のサイズが減った理由

0.2.6から0.2.7で配布物のサイズが結構ドラスティックに減ってますが、これは主にnmoshのデバッグ情報をバイナリ中に含まなくなったからです。
副作用として、従来nmoshのexpander手続きは他のmosh内部手続きと区別されてスタックトレースに出てたんですが、0.2.7からは区別できなくなります。

  • 1. psyntax-moshがCMakeビルドから無くなった理由

埋め込みモードをサポートできないため。0.2.7から、CMakeビルドのnmoshはprefix-lessモードという特殊な実行モードをサポートしています。
prefix-lessモードはアプリケーション埋め込みのためのモードで、キャッシュをホームディレクトリではなくて実行ファイルのあるディレクトリ内に作ったり、デフォルトのライブラリパスに/usr/share/mosh-x.x.x/libを含まないなど、埋め込みアプリケーション向けの挙動になります。

  • 2. Guru-mode

ヘルプにしか書いてないので見過ごされがちですが、nmoshを実行するときに--guru-modeを付けるとバックトレースと同時に非常に多くの情報を出力するようになります。
特にマクロをデバッグしているときに--guru-modeのmacro展開トレースは有用です。多分。

nmoshの起動をCTRL+Cで止めたりすると、キャッシュディレクトリ(~/.nmosh-cache)中に13gHigzのような謎のファイル名のファイルが残ることがあります。
これはキャッシュ生成時に生成しているテンポラリファイルなので消しても問題ありません。nmoshは、一旦ファイルをテンポラリファイルに書きだしてからmoveすることで"同じファイルに2人で書く"ことを防いでいます。(ファイルのロックが信頼できないfsも有るので...)

nmoshは-Tオプションでライブラリを実行できる隠し機能があります。これは特に埋め込みインタプリタとしてnmoshを使うときに便利。
たとえば、

nmosh -T hoge

とすることで、ライブラリ(nmosh applet hoge)の手続きhogeを評価します。今のところライブラリの場所などはカスタマイズできません。LOADPATH等の影響はそのままうけます。

  • 5. ライブラリの実行

nmoshはライブラリを直接実行できます。

nmosh hoge.sls

のように通常のプログラムのように指定することで、ライブラリのexpandとキャッシュを実行します。
要するに、ライブラリを開発するときに、この機能をつかってエラーチェックできます。地味に便利。
あと、psyntax-moshと違って、nmoshはロードしたライブラリを--disable-accされない限り確実にキャッシュします。つまり、REPLからインポートすることでもライブラリをキャッシュさせることができます。