週刊mosh - R6RS bootstrap進捗 / XCode4のgitサポート

現在の主な開発項目はR6RS単体でのbootstrap。なかなか本題のDTrace対応に進まない。。 (GaucheFreeBSD 9-CURRENTで動かないので単体bootstrapを優先的に作業している)

新機能 / Fixされたbug

報告されたbug

Issue 222はnmoshのバグとして報告されているが、これはReaderのバグで、psyntax-moshは単にライブラリの2つ目以降のdatumを無視するのでバグに見えない。
Issue 223はidentifier-syntax関連のような気がしているが、なかなかデバッグできずにいる。。

R6RS bootstrap進捗

compilerは多少動くところまで来た。moshVMコンパイラはR5RS風のスクリプトで書かれており、R6RSインタプリタであるmoshでは実行できないので、機械的R6RSプログラムに変換することで実行可能にしている。
gen-git-build.shを実行するとboot/r6rs/nmosh/boot/compiler.slsとcompiler-macro.slsが生成される。compiler-macroはVMコンパイラに含まれるdefine-macroを分離したライブラリとなっている。
nmoshをコンパイルしてみると微妙に動作がおかしいので、まだまだデバッグ中。。
R6RS bootstrapが可能になると、Gaucheなしでmoshソースコードをbootstrapできるようになる。これが重要なのは、R6RSランタイムのビルド中のbootstrapが可能になる点で、moshバイナリに組込まれるライブラリをビルド時にカスタマイズできるようになる。このような特徴はDebianへのパッケージングにも要求されていて、可能な限りソースコード中のbinary-blobを減らすためにも必要。
R6RS bootstrapの場合、mosh配布に含める必要があるblobは、コンパイラコンパイラのランタイムライブラリのVM bytecodeだけになる。現在はpsyntax-moshとnmoshのVM bytecodeも含んでいる。また、これらを含むようにしないとクロスコンパイルが大変になるので、将来も同梱自体はされる可能性が高い。

Xcode4のgitサポート

nmoshはCMakeに対応しているので、moshの開発時にXCode4のgitサポートの恩恵を受けられる。単純にCMakeを使用してプロジェクトファイルを生成すれば使用可能。

もっとも、XCode4はSchemeソースの編集に対応していないので、あまりメリットも無いが。。
XCodeのエディタは↑のdiff viewの他にlogやblameも備えている。ただし、どちらもgitのコマンドそのままなので、例えばディレクトリごとファイルを移動するとlogに表示されるログが消滅したりする。GitHub for Macのようにlibgit2による実装ではなく、コマンド出力をパースしているように見える。