A note at December first

Shibuya.pm#12の打ち上げでid:moriyoshi & id:tokuhiromPerl internalsの話をしたので考えたことをメモしておく。

  • メソッド呼び出しは関数呼び出しと比べ15-20%遅いと言われているので,これを速くできないか
  • まずクラスメソッドの呼び出しが遅い
    • クラス文字列からstashを得るために検索する必要がある
    • なんとかキャッシュできる?
  • メソッドの呼び出しは一般的に遅い
    • メソッド呼び出しは動的に解決する必要がある
      • これに対し,関数呼び出しは静的に解決するから速い
    • OPコードにstashを保存しておき,SvSTASH(SvRV(obj)) == old_stashであればキャッシュを使うようにするとか
  • そもそもサブルーチン呼び出しが遅い
    • これの改善策は思いつかない
  • class Foo { } の実装はかなり難しいらしい
  • 名前付き引数ほしいね
  • Class::MOPのコアの部分をPerlに組み込む
    • method_mapをコアと同期させるのがしんどい

TODO:メソッド呼び出しの最適化は試するつもり。あとClass::MOPについては,その本質はメソッドオブジェクトにあるとみた。CVにデータを足すといろいろ解決できそうなので少し検討する。