「プログラミング言語の良さ」とか、結構抽象的な話ばかりだった昨日とは 打って変わって実装の話に突入。結構楽しかった。学生さんはどう感じたのかな。
今日の話は
などなど。ゴミ集めの解説には、実際に学生さんにオブジェクトになってもらい、 リファレンスカウントしたり、マークしたり、スイープしたり、 コピーしたり、世代別スキャンしたりしてみた。 Java使ってて、漠然とGCについて聞いたことがあった人でも 実際にどうやって回収しているのか、初めて目で見てわかった人もいたようだ。 レポートでは「GC手法の名前はもう忘れてしまいましたが、実際の動きは一生忘れません」とか 書いてる人もいた。キミ、忘れるの早すぎ。でも、ありがとね。
やってる方も面白かった。
スライドはこちら。 「実演」の部分が学生さんに実際にGCしてもらった部分。
なかなかmalloc(3)が失敗する瞬間にお目にかかることはないので、 ついエラーチェックを怠りがちになる。そんな怠慢を強制的にあぶり出してくれるためのツール。おくじさんによる。
Rubyはちゃんとチェックしてる、つもりだったが、 実際には表題のページで「ダメな例」としてあがっている(泣)。
調べてみると、利用しているハッシュ表の実装(st.c)がチェックしてなかった。 だめじゃん。st.cが使っているmalloc()をチェック付き(必要に応じてGCもする) ruby_xmalloc()に置換。あと、win32.cとwince.cにそれぞれ未チェックの場所があった。 うーむ、こういうのって一箇所ダメならダメだからなあ。