Perl is unDead

Perlは終わってもいないし、Perl6に関しては、まさにこの瞬間も開発されてる。

Perlはもう終り? | | プログラマ2.0日報 | あすなろBLOG

1. 言語仕様が汚い。

この点に関しては、スラッシュドットのラリーのインタビューを読めばPerl設計思想がよくわかる。

本家インタビュー:Perl開発者ラリー・ウォール | スラッシュドット・ジャパン

コンピュータ言語で僕が最も欲しいと思うのは、幅広いダイナミック・レンジだから。汚くって低級な要素とオシャレで高級な要素の両方を兼ね備えている言語を僕は求めている。赤ちゃん語でもオトナの喋りでも受け容れるような言語が欲しい。他の言語では、そういったレベルの違いがひとつに均されてしまう傾向にある。

ここで重要なのは、「赤ちゃん語でも」ってところ。他のプログラム言語では挫折したけど、Perlでプログラミングの世界に入ったという人は多いのではないだろうか。

自分は、プログラミングはCから入ったけど、まともにCでプログラムをかけるようになるには、1年ぐらいかかった。最初にPerlを学んでいれば、こんなに苦労することもなかったなあと思う。

言語仕様が汚いと言ってる人は、たいがい他のプログラム言語をある程度マスターしている人が多い。自分がマスターしている言語仕様を基準に考えてしまうからそう感じるんだろうけど、Perlの持つこの赤ちゃんから大人まで受け入れられる性質のおかげで、ここまで幅広いユーザーに受け入れられたのだと思う。

変数はすべてグローバルで特に宣言した場合だけローカルになる...というあたりの仕様は、そりゃインタプリタの実装は楽チンだろうけども、美意識(とミスしにくさ)には欠けるよね。

これもラリーのインタビューを読むと実装が駱駝からだとかそんな理由でないことがわかる。

詳しく言うと、Perl 6に暗黙のレキシカル・スコープを採り入れないことにした主な理由は、Rubyの例があったからだと言っておかねばならない。僕たちは、明示的なmy宣言にこの先もこだわっていたい。


Rubyで僕が一番問題だと思うのは、暗黙のレキシカル・スコープがそうであるように、「驚き最小の原則」が人を迷わせるということだ。問題は、ひとは誰の驚きで悲観するのか、ということ。上級者は初心者とは違うことに驚くし、小さなプログラムを大きく育てようとする人は、最初から大きなプログラムを設計する人とは違うことに驚くのだ。

Rubyの「驚き最小の原則」は今や死語になったけど、人によっては暗黙のレキシカル・スコープはわかりにくいとラリーは考えてる。だから、明示的にmyをつける。

実はこれ、Perlの一番好きなところだったりする。異なるスコープで同じ変数名を使う場合とかに特に効力を発揮するし、変数がどこで最初に宣言されたのかってのが明示的だとプログラムがすごい読みやすい。(と自分は思う。)あと、同じ変数名でスカラー、配列、ハッシュと書き分けられるところも分かりやすいと思う。

2. 後付けのオブジェクト指向。何かヘンテコなやり方です...神の祝福が要る(bless)わけですが、「神の祝福」って何だろ?

この点に関しては、変だと言われれば認めざる終えない。

ただ、やはりやり方はいくらでもあって、最近だとMooseを使えば、少なくとも他の言語に勝るとも劣らないオブジェクト指向ができる。メソッド呼び出し前後のフックとかは他の言語ではなかなかできないんじゃないか。

3. 5.8(2002年) でマルチエンコーディングに(実質上Unicodeに)ようやく対応。これはタイミング的にはちょっと遅れを取った感が否定できなかったです....

Javaよりかは早いんじゃないでしょうか。JavaのStringクラスは、UTF-16で符号化されてるらしいので、JavaでまともにUnicodeを扱おうと思うとcodePointAtとか使わないといけないようだし。

Perl6 は登場(そりゃ現在でも Haskell で実装された Pugs はありますが...)しても全然普及せずに、Perl5 だけ「レガシー資産」扱いで細々とメンテされる

確かにPerl6が出てもすぐ普及するってことはないかもしれない。ただし、Parrotを使えば、Perl5もPerl6も同じバイトコードへコンパイルされ、全てParrot上で動作するようになるので、どのPerlを使うのかは全く考えなくてもよくなる。Perl6からPerl5を使ったり、Perl5からPerl6を使えたりする。

ちなみにParrotは、来月にようやく1.0がリリースされる。


Parrot VM

Perlが盛り上がるきっかけになればいいな。