PerlをC変換し、高速化できないか?

最近、今まで見てなかったperl.comのarticleを漁ってるんですが、perl.com: Why Not Translate Perl to C?が興味深かったので簡単に翻訳。
内容はタイトル通り、PerlからCへ変換すれば高速化できそうなのに、何故しないのか、というもの。

  • 組み込み関数は既にC化されているので、これ以上手を加える必要は無い
    • split,join等。
  • 柔軟なデータ構造をCに置き換えてかつ高速化するのは難しい
    • ある変数のデータを一つの変数が参照しているだけなら、そのデータの更新処理をCでの置き換えも簡単。
    • ある変数のデータを二つ以上の変数が参照している場合は、全ての変数から更新された(orする)データが参照できないとだめなので、実データへの参照が一段はさまれる(Scalar Value = SV、Dump等で出てくるアレはこれのことか)。
    • これを"double-indirection"と呼ぶ
    • このため、perlでの変数のポインタ取得には、Cと比べて少なくとも2倍のコスト
    • double-indirectionは柔軟なデータ構造を表現するために必要(.=を使用しないなどの制限を加えれば高速化可能だが、それはもはやCだ)
    • これこそがperlが遅い理由

結論としては、Cに変換できなくはないがperlの自由度を表現するには、現状ではそれほど速くならない、ということみたいです。
上記リストだと、特にデータ構造のほうはわかりにくいし、原文には図入りで解説してあるので、是非原文を参照してみてください。

perl6ではこの辺りの高速化も考えているようで、Cで以下のようなデータ

int a[1000];

をperl6の構文で以下のように

my int @a is dim(1000);

と書くことで高速な(というか普通の)C配列に変換できるような仕組みを考えているようです。

確かにperl6でこの仕組みが導入されるなら高速化作業は楽になりそうですが、perlの自由度が制限されることを考えると、id:higeponさんのひげぽん OSとか作っちゃうかMona- - XS利用でPerl高速化 その2でも指摘されているように、perl6でもある程度枯れた処理に適用するべきでしょうね。