chibi-schemeのWin32サポート

今作っているゲームは基本的にWin32で制作していて、それを各プラットフォームに持っていくという方式にしている。なので基本的に処理系はWin32で動いて欲しい → とりあえずWin32で困らない程度にPRしてパッチした:

で、ゲームの方ではnmoshの移植性ライブラリであるyuniを使うのでココまでで必要十分だけど、通常の人間がWin32アプリに組込めるように、せめてsnow2(chibi-scheme標準のパッケージマネージャ)が動く程度までは持っていきたい気持ちは有る。。(今はScheme標準のexitすら移植していない)

移植方針の難しさ

PR#438で議論しているけど、多倍長整数のためのlong-integerと通常のScheme wordの持たせ方がなかなか難しい。というのは、Visual C++では64bit環境で使えるマシンワードよりも長い整数型が存在せず、long-integerの型をどう持たせるかというポイントが有る。

ちなみに、GCCには128bit integerが有るため、そちらを使えばScheme word同士の直接演算で発生する"繰り上り"を直接そちらに格納できる。
今のところ、Win64 + VCの組み合せではビルドできない。chibi-schemeでは、実装上Scheme wordサイズはポインタのサイズと同じにしなければならないため、bigintの実装に必要な型が用意できない。今のところオーダーは sexp_make_integer では処理系の最長の整数を使うことなので、64bit環境で32bit fixnumを実現するしかない。このためにはいくつか追加の修正が必要になる(fixnum長 == word長と見做している箇所がいくつか有る)。
もっとずっと深刻な問題は、chibi-schemeの実装および標準ライブラリが強くPOSIXに依存していることで、当然Windowsではchibi-schemeの標準ライブラリの多くを再実装しなければならない。...しかも既存のSchemeコードとは当然互換しなくなってしまう。標準ライブラリがPOSIXバインディングなので、それを使用して書かれたプログラムも自動的にPOSIXに依存することになる。
この辺のポイントは処理系のカラーが非常に出るところなのでどうすべきかはなかなか難しい。chibi-schemeのメンテナンスに出せる工数は限られているので、あまりメンテナンスの負荷にはならないような方法を提案していく必要があるが。。
現時点では、snow2の動作は諦めて、何か組込みのサンプルを提供する程度が限度なのかなという気はしている。今は組込みアプリケーションのサンプルをCIしていないので、make installが壊れていても気付かない https://github.com/ashinn/chibi-scheme/pull/444 問題がある。あと、lgamma_r https://github.com/ashinn/chibi-scheme/pull/439#issuecomment-342868736 の問題とか、ドキュメントの追補も最低限やっておく必要は有りそう。