それ以外だとGaucheやMoshみたいにGC_sizeから割り付けられたサイズを求めてごにょごにょするといいったことができないとか、多少の不満があったりはする。
そこでとりあえずなんとかならないだろうかと思い計画+どうしようこれ?的な問題点を思いつくままにずらずらと。
計画(妄想)的な何か
- 世代別GCにしたい
- 特に理由はないけど、大域定義とかはGCされる率は極めて低いので効果的な気がする
- Scheme48の最新版は世代別GCを実装してるし
- パラメータでGCの挙動をチューニングできるようにしたい
- メモリ割付を安価にしたい
- Ypsilonはメモリの割付がおそらくすごく高速(ctak見て思ったこと)
- BoehmGCはベンチ取ったことないから知らないけど・・・
- Conservative GCかPrecise GCか
- 世代別ならPreciseじゃないとまずいのか?
- 現状のコードを書き直さないようにしたい
- Conservativeな世代別GC?(可能なの?)
- マルチスレッド環境をどうするか
- ヒープの場所をどうするか
- スレッド毎に持つ
- 子スレッドが死んだ時にどうする?
- ヒープはメインスレッドのみが持つ
- 割付ごとにロックする
- 遅くね?
- スタックの底をどうするか
- あんまりスレッドモデル依存にしたくない
- かといってアーキテキチャ依存もなぁ(espとかrspとか?)
RacketはPrecise GCなんだけど、↓なので参考にならない・・・
RacketのPrecise GCをうまいこと移植できないかなぁと眺めていたが、なんでBoehmGCが梱包されているのかの理由とまず不可能だということだけが分かった。Boehm版でソースコードの変換してからPrecise版作ってるんだ。
— Keiさん (@tk_riple) 2013年2月27日
Scheme48の実装を理解しつつ分散GC的な何かを理解するという地道な方法しかないだろうか。できれば、サクッと作って「GCは自前じゃないとね」とか軽口を叩いてみたいのだが・・・
誰かこの本を献本してくだしぁ(ぉぃ
2 comments:
Steel Bank Common Lispなんかはx86で保守的な世代別GCを採用してるそうです。
"12.10 Implementation (Linux x86/x86-64)"
ありがとうございます。
眺めた感じだと、結構なハックがあって読み応えが半端ないです。
Post a Comment