GC本読書会

記憶をダンプ。どれも別に本当に正しい議論であるかは不明。もっと重要な論点とかあったら教えていただければとてもうれしいです。

GCってスループットvsレイテンシってよく言うわけですけど」

「実際 GC する言語でスループット欲しいとか思ってるユーザはいるんですかねー。ベンチマークはかるならスループットだろうけどねえ」

組み込み系の人が多い関係もあってか、みんなレイテンシの方が…って感じみたいだった。スループットが欲しい局面としては Javaバッチ処理する時とかは速いに越したことはない的なことを言われて、ああやっぱそいうのかなぁと。

ただ、バッチ処理とかって別に Java じゃなくても C++ で書いてもメモリ管理とかそんな大変じゃないものが多いような…ということと、 GC にかかってる時間ってまぁそもそも全体から見てそんなに多くはないはずで、そこが仮に 2 倍速くてもなー、とは思った。

あと Ruby なんかだとレイテンシ減らすような concurrent なりインクリメンタルなりをやろうとすると、ライトバリアいるようになって拡張ライブラリ書けねーとかいう話はよく聞くわけですね。

個人的な素人感覚では、 GC ある言語で欲しいものはメモリ効率とレイテンシであって、スループットじゃない気がするんだよな。

そいうこと考えると Python, Perl の reference count + 循環は mark and sweep ってのはレイテンシは良さそうな気がするので、悪い話ではないのかなぁ。

そいや JavaGC 選べたよね…ということで調べてみるとやはりレイテンシ重視とスループット重視を選べる感じみたいだった。具体的にどう違いを出してるかは後で調べたい。

「lazy sweep にデメリットはあるのか」

ゲームのメインループの中とか、 GC 起きないようにある程度頑張ってる状況でもアロケーションにオーバヘッドが出ちゃうのは微妙。このままでは GC.disable が作れない。ただ GC.disable は別途 freelist も管理すれば提供はできそう。ただまたオーバヘッドが増えるわけだけど。

「Guy Steele のライトバリアは Dijkstra のに比べてデメリットあるのか」

Guy Steele のやつは、要は「今ポインタの値さしかえてるようなプログラムはすぐまたさしかえる可能性高いよねー」というヒューリスティクスに依存してる部分があるので、それに反する挙動をしまくるようなプログラムには弱い、かな?

「湯淺のライトバリアのメリットは何」

ルートスキャンやりなおす必要がないことかな。

GC 本について

そう献本いただいたのにも関わらずまだ実装編をざっと読めただけで感想書けてなかったので書いておきたい…

アルゴリズム編は今日まであまり読んでなかったのだけど、今日読んだ範囲はちょっとそれぞれのアルゴリズムのメリットデメリットがわかりにくいかなーという印象を受けた。

でもやはり基本的なアルゴリズムを一通り紹介してくれるのはありがたいと思った。

実装編の方は、著者の思考過程だだ漏れって感じで、ところどころ私の思考過程とずれて読みにくいこともあったけど、著者の思った何故この設計にしたか的な疑問への解答とかが充実してるのはいいなーと思った。多少読みにくいとかはどうでもいい子なので、こういうのは好き。著者の興味がそっち向いたんだろうなーって感じで GC 以外に脱線しかけてる部分があるとかも含めて。

そういう意味では実装編でそのへんの評価はやるから、アルゴリズム編はメリットデメリットの評価とかは淡白な感じでいいのかなーと少し思った。

あとは実装編はやはり Boehm GC がぜひ欲しかったというのがあった。一番どろどろしてる感じで楽しそうなんだけど。 C で stop the world やる時の苦労とかそういうやつ。いやでも GC の解説って感じじゃなくなるかも。

あとは JVM もぜひ知りたい系の感じ。

まとめ

やっぱ GC は死ぬまでに作っておくべきなのでさっさと作るべき。

例のごとくパーサとか書きたくないし言語デザインとかもしたくないので、小さな Scheme でも作ってみるのがいいのかなぁ。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h