C言語でコピーGC
tanakhさんがC言語でコピーGCを作られてソースを公開してます。
でも、問題があって、スタックの中身はポインタだか、ポインタでないんだかわからないから、
コピーしたときにアドレスが変わるけど、そのアドレスをスタックの中に入れられない。
って問題があります。
C言語の関数、呼び出し規約を変えてしまって、OSごと、これはポインタだぜってわかるようにスタック使うようにしたらいいんでないかなぁと思ったんですが、何かいい手はないのかなぁ。
OSをこれから作る人がいたら、コピーGCがしやすいOS作って、C言語でコンパイルできるようにしてみてほしいなぁ。なんて、思うのでした。
そこらへんhigeponさんがmonaに採用してくれたりしたら面白いんだけどなぁ。
なにやら、shinichiro_hさんはdumperとかいうのつくってらっしゃいます。なんかしらんけど、型情報が取れるらしい。型情報が取れれば、ポインタかどうかってのもいちお、わかるのかな???
ってな感じで、、、。そういう風にGCのことをちゃんと考えてあるのがJVMやら.netフレームワークなんだから、それ使えばいいんじゃって気もするけど、そういうんじゃなくて、ネイティブで何とかしたいなぁ思うわけですな。
GCCのバッグエンドいじったらなんとかならないのかなぁとか思います。
いじったので、Cのフロントエンドをコンパイルして出来たコンパイラでOSのリビルドすればほとんどのライブラリは生きていけるのかな???でも、アセンブラレベルで書いてあるのはだめだな。ってかんじです。RTLで何か書いたら調子いいとか、c--だといいとか。。。
ほかのライブラリは見ないってなら、fiber動かすときは自分でスタックつくるのだから、自分で使うスタックは別な領域で扱えばなんとかなるのかなぁ。
gc関係ないライブラリ呼ぶときは、一段関数をかませてスタック切り替えするとか。
なんだか、わけわからんです。