東京にいるからと取材を受ける。今週も取材ウィークが続くのか。
ビジネスとRubyのようなテーマで。 主にRubyアソシエーション理事長としての「帽子」を期待されてのインタビュー。 十分に期待に応えられただろうか。
先日の動的言語で検出できないエラーの例でも Gauche用のglintならちゃんと検出できる、という話。
プログラムに内在的に含まれている情報を十分解析できれば 動的言語でも相当の問題を自動的に検出できるはずである。
解析時間の関係から、おそらくは静的言語の型チェックのように コンパイラに組み込みとはいかないかもしれないが、 それでもいろいろできることはあるはずだ。
Rubyでも自動検出をやってる人がいたような気がするんだけど。
RubyのGCのためにLazySweepパッチを作った、という話。
LazySweepとはマーク・アンド・スイープ法でGCをする場合、 マークフェーズはプログラム本体を止めないと行うことができないが(ここではインクリメンタルGCは無視)、 スイープフェーズは並列に行えることに着目し、 スイープフェーズを行わずにGCを終了してしまうことで、 GCによる停止時間を削減しようというもの。
実際にはスイープのためのコストは個別のオブジェクト割り当てに分散されるので 停止時間は改善されるが、スループットは変化しない(or 若干低下する)。
いつかやりたいことだと思っていたので、 実際に取り掛かってくださったことにはauthorNariさんにすなおに感謝したい。
しかし、あちこちで話を聞くと プロセスサイズ問題とcopy-on-write問題の方が 停止時間よりも深刻なケースが多いようなので、 優先順位としては
の方が高いようだ。その上で、(そう遠くない将来)このLazySweepも取り込みたいものだ。
ところで、GCの性能評価のためにはベンチマークは必須である。 どこかに良いGCベンチマークはないものか。 GCの挙動はオブジェクトの割り当てパターンに大きく依存するので いろいろなパターンのものを取り混ぜたものが望ましい。
<URL:http://lloydforge.org/projects/ruby/>のものを もらってくるかなあ。
Pragmatic Dave Thomasによる「DSLってのは英語っぽいプログラムのことではありません」宣言。
一般的にはともかく、 最近のRuby界では「Rubyの文法を「悪用」して、英語っぽく書くのがDSL」 という流れがあるので、それに釘を刺すというところか。
まあ、
2.weeks.ago
くらいならともかく、
add.a.diary.entry.for("Lunch").for(August.10.at(3.pm))
はやりすぎだろう。