tarball(非公式)

PowerPC64だとGaucheが動かないのをすっかり忘れてたので取り急ぎtarball。

ライセンスの都合でVCのサポートは含まれていない(LGPLを同梱する必要がある)。MinGWではビルド出来ない。
いわゆる--prefixで異なるディレクトリにインストールするのが望ましい。たとえば/opt/nmoshをprefixにした場合、/opt/nmosh/bin/nmoshのようにすれば正常に動作する。
このtarballにはnmoshが含まれている。nmoshはAndré van Tonderによるsyntax-case/R6RS library実装をベースにしたmoshで、ちょうど1ヶ月前から移植作業をしている。http://d.hatena.ne.jp/mjt/20091211/p1
(fmt)や(ext serverport)のような幾つかのライブラリはこのtarballには含まれていない。これらはgithubリポジトリから入手できる。http://github.com/okuoku/mosh see ext/newruntime。
0.2.0からの変更点 :

  • (higeponによるバグフィクスを取り込んでいる。Unicode関連のバグ修正。)
  • (-vまたは-Vで、元にしたリポジトリバージョンを表示する。)

masterとの差異 :

  • --enable-developerでなくてもビルドできる。ただしリポジトリバージョンは表示しない。nmoshはランタイムのバージョンを表示する。
  • make distに含まれるファイルのうち、ドキュメントを削除している。
  • nmoshが追加された。
    • 従来のmoshはpsyntax moshとして区別する。moshでpsyntax moshを起動し、nmoshでnmoshを起動する。
    • nmoshとpsyntax moshの違いは、R6RSのためのライブラリマネージャとmacro expanderの実装。
    • R6RSの細かい特性が異なる。R6RS compliantでないライブラリはロードできないかも知れない。これには標準ライブラリも含まれる(shell以外は修正している)。
    • nmoshはpsyntax moshよりもreliableになるように実装されている。ライブラリのロードや実行に関してサイレントに失敗することは無い。
      • psyntax moshと異なり、ライブラリは大部分がステートレスに管理される。時刻以外のprefix.txtのような外部ステートには依存しない。
      • ただし以下の例外を除く : 異なるホストで$HOMEを共有している場合、コンピュータの時刻が信頼できない場合。$HOME/.nmosh-cacheディレクトリに単一の時刻源からアクセスしていることを仮定している。
    • (rnrs load)ライブラリのloadを使うことで、実行中に別のスクリプトを読み込むことができる。
    • loadによってライブラリを追加することが出来る。ただしこの機能はスレッドには対応していない。
    • syntaxオブジェクトをクエリできる。例えば、id-maybe-libraryプリミティブを使用することでdatum→syntaxを実行したライブラリを知ることができる。
  • make ntestターゲットが追加された。moshの代わりにnmoshを使ってtest suiteを実行する。make checkの各種テストはpsyntax moshとnmoshで差異は無いため、make check && make ntestで全てをテストできる。
  • 幾つかの環境をサポートしなくなった(nmosh) : VisualStudio、gcc 3.x、Cygwin 1.5
  • Win32+gcc環境では、ランタイムのUTF-16UTF-32変換をしなくなった。ただし、当該環境(MinGWCygwin)ではiconvをサポートしたgccでないとビルドできなくなった
  • Cygwin : (host-os)が"cygwin"を返すようになった。
  • 他 : http://wiki.monaos.org/index.php?.mjt%2Fnmosh%2FRELNOTE

通らないテスト :

  • make checkのVM test。nmoshではライブラリの名前がbaselib.scmに変更されているため。
  • shell。サポート予定なし(aliasは未定義シンボルを導入するため)。
  • R6RS base。letのセマンティクスに互換性が無いため。修正予定。

Known Issues :

  • READMEやドキュメントを含んでいない。修正予定。
  • (リリースに比べて)遅い。互換性のために、幾つかのライブラリを修正している。
  • 例外で終了する等(exit)で終了するとプロファイラの結果が出ない。
  • Cygwin : io-errorテストが失敗する。
  • Cygwin : システムによる行末文字の指定を尊重しない(常にLFを採用する)。サポート予定なし(互換性問題のため)。
  • nmosh : キャッシュを消去しない。キャッシュメンテナンスコマンドを追加予定。
  • nmosh : メイン以外のスレッドを(exit)で終了すると何か間違ったことが起こる。
  • nmosh : ライブラリキャッシュのロードに失敗すると異常終了する。将来のバージョンではretryするように修正する。
  • nmosh : シンボリックリンクを使ってライブラリを指示すると問題が起こる可能性がある。SRFIを特別扱いすることで、シンボリックリンクそのものを禁止する予定。
  • nmosh : $HOME/.nmosh-cacheが書き込み不能だと何か間違ったことが起こる。
  • nmosh : デバッグシンボルファイルを生成しない方法が無い。
  • nmosh : debug-expandのような幾つかのオプションを尊重しない。
  • nmosh : includeのような外部環境に依存するマクロを使用してもライブラリにその事実は記録されない。
  • nmosh : --verboseオプションがverboseすぎる。

nmoshはまだ最適化されていないので、日常のスクリプティングには向かない。特にexpandは革命的に遅い。