A note at December first
Shibuya.pm#12の打ち上げでid:moriyoshi & id:tokuhirom とPerl internalsの話をしたので考えたことをメモしておく。
- メソッド呼び出しは関数呼び出しと比べ15-20%遅いと言われているので,これを速くできないか
- まずクラスメソッドの呼び出しが遅い
- クラス文字列からstashを得るために検索する必要がある
- なんとかキャッシュできる?
- メソッドの呼び出しは一般的に遅い
- メソッド呼び出しは動的に解決する必要がある
- これに対し,関数呼び出しは静的に解決するから速い
- OPコードにstashを保存しておき,SvSTASH(SvRV(obj)) == old_stashであればキャッシュを使うようにするとか
- メソッド呼び出しは動的に解決する必要がある
- そもそもサブルーチン呼び出しが遅い
- これの改善策は思いつかない
- class Foo { } の実装はかなり難しいらしい
- 名前付き引数ほしいね
- Class::MOPのコアの部分をPerlに組み込む
- method_mapをコアと同期させるのがしんどい
TODO:メソッド呼び出しの最適化は試するつもり。あとClass::MOPについては,その本質はメソッドオブジェクトにあるとみた。CVにデータを足すといろいろ解決できそうなので少し検討する。