Kashiwa Schemeの今後についてのメモ
Kashiwa Schemeは、大学院の研究(ごみ集めの実装)が面倒になってきて、
なかば現実逃避気味に始めたのですが、
KASHIWAのごみ集めを作ったりするのが想像以上に面白くて、
わりとのめり込んでしまいました。
結果として、研究を放置しすぎてしまったので、
そろそろ研究にコンテキストスイッチしないといけないので、
今考えてることを忘れないようにメモしておきます。
私のためのメモなのでかなりテキトーに書きます。
—
KASHIWAの現状
- Chenery on the M.T.A.の概念は実装完了
- ごみ集めはスタックとヒープの2世代の世代別GC
- ただし、シンボルは別管理になっていて、この部分のGCは未実装
- あと、ライトバリアの実装が酷いので修正が必要
- 組み込みの手続きはまだちょっとしか実装していない
- 組み込みの手続きは書けばいくらでも増やせる
- 構文はlambda, if, set!, quoteなどプリミティブなものしか実装していない
- caseやandなどの構文はifなどのプリミティブな構文に展開するマクロとして書ける
- 最終目標はKASHIWAのコードをKASHIWA自身でコンパイルすること
- とりあえずの指標としてR5RSにほぼ準拠したらできるはず
- 衛生的なマクロは正直、実装しなくてもいい気がする
- 今の時代に作ってるんだからR7RS準拠とか目指したほうがいい気もする
- SchemeからCの関数を呼び出したり、CからSchemeの手続きを呼び出したい
- 余力があればヒープのなかも2世代くらいに分割して世代別GCしたい
- 元気が有り余っていたらマルチスレッドとか考えたいけど、そんなに元気はない
- グローバル変数をどう扱うか
- 現状は、(define x …)とするとxというCのグローバル変数ができる
- (複数のファイルを経由して)同じ変数を2回defineしたときどうするか
- 対話環境を作って、そこからコンパイルしたときどうするか
- Cのグローバル変数を使うか、「環境オブジェクト」のようなものを作るか
- SchemeからCの関数(非CPS)を呼ぶのは結構簡単なはず
- ただし、GCとの連携はちょっと面倒
- Cの関数からSchemeの手続きを呼び出すのをどう作るか
- Schemeのプログラムから.soやDLLを作ればいい?
- 共有ライブラリを2個以上使うときは誰がGCなどをするのか
- KASHIWAのコア自身を共有ライブラリにして、他の手続きはそいつに色々お願いする?
- そうなると、やはり「グローバルな環境」をどうするかが問題になりそう
- valuesどうしよう。call/ccをテキトーに作ったのが祟ってきそうだ
今後の展望という名の妄想
今後考えないといけない箇所
以上。あとで何か思いついたらここに書き足すかも。