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をテキトーに作ったのが祟ってきそうだ

    以上。あとで何か思いついたらここに書き足すかも。

Leave a Reply