DockerのAlpine化に向けて / Guile対応と実装WARの管理

Cygwin64ビルドのためのパッチをBoehmGCに投げました( https://github.com/ivmai/bdwgc/commit/4e24d219d29abb2b111bb9a9ccb13c3f149a855a )。Gauche由来のパッチが溜っていくね。。(e.g. https://github.com/ivmai/bdwgc/pull/91 )
基本的にアンダースコアを付けるだけ。Gauche等のパッチと違うのはGC_wordにキャストする点だけか。

Musl libc対応

で、今やっているのはDockerのAlpine化に向けたMusl libc対応で、後動いていないのはincremental collectionだけ。Issueに書いた( https://github.com/ivmai/bdwgc/issues/73#issuecomment-179080943 )ようにMuslは__MUSL__のようなfutureマクロが無いのでglibcで無い かつ uclibcでないで判定する必要があり、uclibcはglibcを詐称するので、結局のところglibcでないならMuslに帰着することに。最新のdietlibcで壊さなければまぁ良いかな。と。
MuslはTwitterでツイートしたら作者から直接コメントされる( https://twitter.com/RichFelker/status/695113058381885440 )等衝撃的なlibcで、glibcと相互依存にあるLinuxでこれをやる点はすごい情熱を感じる。
ちなみにAlpineLinuxの作者は現在Dockerに雇用されていて、HackernewsではDockerオフィシャルイメージのAlpineへの移行について触れられている( https://news.ycombinator.com/item?id=11000827 )。なのでMuslへの対応、つまり潜在的glibc-ismへの対処は今後重要になってくる可能性がある。(ちょうどDebian/Ubuntuのash移行でbashismがあぶりだされていったように)

Guile対応と実装workaroundsの付番管理

Guileのmasterの非互換問題は結局workaround( https://github.com/okuoku/yuni/issues/29 )した。Chicken同様に、...等の補助キーワードが標準ライブラリにbindされていない処理系扱いとすることで問題を回避している。
yuniは移植性ライブラリなのでこの手のworkaroundはかなり仕込まれているが、ちょっと数が増えてきて管理しきれなくなってきたのでSIBR(Scheme Implementation Behaviour Report)として付番して管理することにした。もうちょっと政治的に正しい名称を考えたい。

この挙動を付番して管理する手法はCMakeのPOLICY( https://cmake.org/cmake/help/v3.0/manual/cmake-policies.7.html )のようなもので、将来はyuniで書かれたSchemeプログラムからホストSchemeの挙動をクエリできるようにするつもり。cond-expandでも良いじゃんという説は有るが、SRFIと違って誰も管理していないのであんまし役に立っていない気がする。
現時点でSIBRは7つ有る。興味深いものとしては:

基本的にyuniではR7RS挙動に揃える方向で各種処理系をwrapしているが、SIBR0003のように意図的にwrapしていないようなケースが存在する。シンボルでなく番号管理するのはフロントエンド都合(翻訳の都合で全エラー/警告に番号を振る必要があるため揃えている)。