pao - Perl Array Operators

id:tokuhiromに触発されてPerlVM拡張モジュールを書いてみた。
http://www.ipe.tsukuba.ac.jp/~s0710509/pao-0.01.tar.gz *1

これでRubyのように配列演算ができる。

use pao;
$a = [1, 2, 3] + [4]; # => [1, 2, 3, 4]
$a = [1, 2, 3] - [2]; # => [1, 3]
$a = [1, 2, 3] & [2]; # => [2]
$a = [1, 2, 3] | [1, 2, 3, 4]; # => [1, 2, 3, 4]

ところで,VMに直接手を加えるのでさぞ高速だろうと思いきや,下手をすると同様の処理をPurePerlでするよりも遅かったりする*2。まさに「Perlの代わりにCを書くことなかれ」を実感してしまった。

なお,Perl5.10で導入されたレキシカルプラグマ機能を使っているので5.10でしか動かない。

*1:こういうときはCodeReposを使うのが最近のやりかたらしいがSVNがよくわからない。あとで調べよう

*2:example/のベンチマーク参照。"-"や"&"については採用しているアルゴリズムが良くないせいもあるが,非常に単純な加算演算子でさえ同様のPurePerlコードより遅いのは意外だ