「Perl/XSが得意なこと」の補足
Perl/XSが得意なことはほとんどオレオレ用語といっていいくらい端折ったリストなので追々補足しておく。
まずひとつ,「注意を払う」というのは内部で呼ばれるmalloc()を極力減らすという意味
と書いたが,よく考えてみればこれはmalloc()*1が遅いというのが問題なのではない*2。malloc()はそれだけで終わるものではなく,mallo()を呼ぶAPIの内部または前後ではデータのコピーが伴うのが普通だし,その前にSVの割りあてが必要だったり,あるいは一時SVを使うとなればENTER+SAVETMPS ... FREETMPS+LEAVEといったブロックスコープ管理ルーチンが伴ったりと,付随する様々な処理が加わることが極めて多い。だから避けるべきなのはmalloc()そのものというより,malloc()に付随する膨大な処理である。
具体的には,たとえばMOP.xsでは,メソッドやハッシュキーをその都度生成して破棄するのではなく,XSのbootの際にSVを予め確保しておき,そのSVを使いまわすようにしている*3。またData::Util::is_instance($x, $class)では,関数の設計段階で新しいSVを作らないようにし,ほぼ同等の機能を持つParams::Util::_INSTANCE($x, $class)が第一引数を返すのに対し,Data::Util::is_instance($x, $class)は真偽値を返す*4。