週刊mosh - VisualStudio 11でコンパイルできない問題 / プラグインの配置

うーむ。。遅延中につき0.2.8の機能は見直し中。
Moshのmemory footprintがそろそろキツいので"遅いけど小さい"サブセットを用意する必要性が日に日に増してきているところ。。R7RSではsyntax-caseやidentifier-syntaxがいらないので、R7RS(small)対応の実装にしてR6RSは現状のnmoshを使ってエミュレーションで提供というのが有力。

CMakeのアップデート

CMake 2.8.6がリリースされました。moshはこのバージョンもサポート。今回からVisual Studio 11やiPhoneのような新規プラットフォームに対応したので、対応は今後検討。
VS11では環境によっては生成されたプロジェクトを直接開くことが出来無いので、一旦VisualStudioを開き、VisualStudioからプロジェクトを開くかドラックアンドドロップで開く。(あと、スタートメニューの"最近使ったファイル"からでも開くことができる)

未解決: VisualStudio 11でコンパイルできない問題

moshはBoehm GCC++11に対応していないのでビルドできない(Allocator traitsのselect_on_container_copy_constructionを持っていない)。
どう解決するのかは検討中。。もちろんunorderd_map無しでどうにかすることは可能だけど性能の問題があるし、現状のmoshはunorderd_map無しでは(MonaOSを除いて)ビルドできない。。

プラグインの配置

Mosh 0.2.8から導入される"プラグイン"は、RubyPerlの拡張ライブラリに相当する仕組みで、Cをつかってライブラリの呼び出しコードを記述できる。
ちなみに通常の拡張モジュールと異なり、moshはC向けのHeapアクセスAPIを持っていないので、プラグイン側から直接Schemeオブジェクトを生成することはできない。
通常のシチュエーションではFFIを使えば問題無いですが、cursesのように仕様上関数がCマクロとして宣言される可能性のあるライブラリはどうにもならないので。。
プラグインアーキテクチャ依存コードなので、その配置が絶妙な問題になる。現状では/usr/local/share/mosh-0.2.8/plugins/mosh_opencl.mplgのようなパスにインストールされるけど、この方針ではmultilibなシステム(32bit ライブラリと64bit ライブラリの同居するシステム)と互換性が無くなってしまう。MacOSみたいに1つのファイルで複数のアーキテクチャを持てればいいのに。。
0.2.8でサポートされる見込みのプラグインで確実なのは今のところCursesのみ。いくつかのJITC(oil runtime compiler、OpenCLGNU lightning)を演算用途に検討していて、どれかが入るかもというところ。orcとOpenCLが有力。LightningはLGPL2で、OpenSSLをリンクしたmoshとライセンス的に懸念があるのがネック*1。ちなみにGNU lightningはRacketのJITCとして利用されている。

*1:現状のビルドシステムには、共有ライブラリでのリンクを強制する仕組みがない。