Perl6 superじゃなくてnextsame

14日目のレッスンはメソッドのアップコール。
http://perl6advent.wordpress.com/2010/12/14/day-14-nextsame-and-its-cousins/

サブクラスからスーパークラスのメソッドを呼ぶときは「superなんちゃら」と言ってアクセスする言語が多い。Perl6ではこういう時に「nextsame」と言う。 このnextsameはOO階層を上に登るだけじゃなくて、ラッパーの定義から囲まれている関数を呼び出すときにも使う。

nextsameを理解するにはまず「dispatcher」を知らなければいけない。名前とシグニチャーから呼び出す関数を解決するdispatcherという物があって、これが今の関数の次に指定するものを呼び出すのがnextsameの役目。

dispatcherのなかで「同じ」シグニチャの「次の」候補を参照するから「nextsame」と呼ばれる。

ここでもPerlのDWIMとPythonの"explicit is better"の違いが際立つ。PythonではOOのsuperにしてもdecoratorによるラッパーにしても、必要なものを明示的に渡される。OOの場合、クラス階層をナビゲートするprimitiveな機能が提供され、コール自体はアプリケーションがする。一方Perlは「今の状況で私が欲しい『次の関数』を呼ぶ」という機能が提供される。

簡単な仕組みの理解のもとに数少ないbuiltin機能を組み合わせるPythonのスタイルの方が認知効率が良いような気がする。(こういうのをorthogonalityっていうのかな) しかし、スタイル以外にも言語の有用性は色々ある。Perl6はこういうキーワードをゴリゴリ覚えて学ぶ価値があると思う。