Open4
nccc: Chez Schemeで絵が出るまで頑張る会
いろいろ考えたけど、既存のFFI機構は一旦捨てて、PythonとかRuby等他の処理系でも実装できる形でやりなおす事にした。今回は3つのScheme処理系を選んで、そこである程度作りこんだ後他のScheme処理系に広げる方向にする。
- Chez Scheme: JITC型の処理系(R6RS)。このため、Scheme側だけでFFIを実装できる。今回はこれで基本的なPC上のプロトタイプを済ませる。
- Gauche: 有名なSchemeインタプリタ(R7RS)。処理系側にはlibffiのような機構が無いため言語拡張を書いて統合する必要がある。この処理系で移植性の確認をする。
- Ribbon: 自作の処理系(yuni)。デバッグ機能が一切無いので、基本的に既存のScheme処理系である程度完成させたアプリケーションを動作させることを想定している。
AndroidやiOSのようなモバイルプラットフォームでは基本的にRibbonを使う。
union 化
今までは関数のパラメタは uint64_t の配列として渡していたが、これだと浮動小数点を uint64_t* 整数ポインタにキャストして代入することになり、strict type aliasing ruleに反する。というわけで union に格納することにした。
NCCCはNormalized C Calling ConventionなのでC++のサポートについては気にしないことにする。
動的ライブラリを配置する
add_custom_target でコピーすることにした。最初 add_custom_command の POST_BUILD でやろうと思ってたけど、そういやこれ sub directory で追加されたターゲットには実行できないんだった。
Make directoryは1回で良いな。。というか、mkdirは本来はCMakeの実行時じゃなくてビルド時にやる方が正しい気はする。面倒なので普通に file(MAKE_DIRECTORY ...) で済ますけど。
出た

まぁ出てあたりまえなんだよなぁ。。とりあえずデスクトップアプリを作るのに必要な機能(VSYNCまちとかタイマとか)をyuniframe側に加えて何かアプリを作ってみるのが良いかな。