世間的な要求のために、システムにインストールされた(大抵Shared libraryの)BoehmGCを使用するconfigureオプション --with-system-bdwgc を追加した。特にFedoraのようなRPM系ディストリビューションへの収録のためには事実上必須なので。。

これに伴い、クリーンビルドにはpkg-configが必要になった。

このオプションはPair/AnnotatedPairでの最適化を無効にする。本来は、アロケーションのサイズを使用してPair/AnnotatedPairを区別しているが、これは正しくない(GC_DEBUGで壊れる)し、その辺のディストリビューションにおけるBoehmGCでも動かない(DONT_ADD_BYTE_AT_ENDが必要)ので、Pairにも1ワードを足して区別できるようにしている。

(多分、Pairは専用のプールを使用して割り当てるのが好ましいだろう。)

Shared libraryなGCを使用すると、他のGCとリンクしているライブラリをFFIできるようになるというメリットがある。nmoshは組込み指向なので、リンクターゲットに余計な制約を課すのは良くないという判断もある。

Win8+Cygwinで動かない問題 GC自体のテストは通るが、GC_FREEに異常なアドレスが渡る。C++ I/FがGCを使用していないポインタに対してデストラクタでGC_FREEを呼んでいるように見える; つまり、GCのC++ I/FはCygwin上で正しくoverloadしない(このコミットでworkaroundされている: https://github.com/ivmai/bdwgc/commit/83e0a2cefcbc88bdbc19bcf98cc3a1f1cf307d63#diff-8247d35cb549ef6e40eac573ec96934dR398 )ので、STLのstring等が正しく動かない。

というわけで、唯一STLを使っていたscheme::getMoshExecutablePathだけ修正してとりあえず動くようにした。。

Win8とCygwinはかなり鬼門で、細かいハマりどころが多い(MacOSのバージョンが上がるとmacportsで面倒が掛かるのに似ている)。