先週土曜日、8/30にLL Futureに行ってきました。一番のお目当てはLarry Wallだったんですが、感想としては「このオッチャン、正規表現大好きだなー」ってことですね。
突然ですけど、Perlの功績って凄いと思うんですよ。何が凄いって、「正規表現リテラルの発明」ということに尽きると思うんですね*1。正規表現を文字列リテラルで表現しないといけない言語って本当に悲しいですよね。Emacs Lispで正規表現を書こうと思ったらエスケープ地獄ですもん。grepもegrepも少し凝った正規表現を書くとバックスラッシュだらけで泣けてきますよね。
そんなこんなで、Larry Wallが正規表現リテラルを言語として組み込んだのは大英断だったと思います。で、そんな思いつきが出て来たのも、Larry Wallが正規表現が大好きだったからなのかな、と思うんです。正規表現の強力さを手軽に使えたら素晴らしいプログラミング体験ができるはずだ、という直感がPerlを作ったと僕は信じています。そしてその直感の正しさは今や誰もが認めるところですよね。今やRubyもPythonもJavaScriptも正規表現リテラルを持っているわけですから。
そして、その強力な正規表現を更に便利に使うためのアイデアをLarry Wallは提案してくれました。それまでの正規表現の活躍の場は行単位であることが多かったはずですが、プログラミングで扱う文字列は改行文字も含んでいる可能性があります。これに対し、Perlは/sフラグとか/mフラグとかを導入したわけです。これにより、改行文字を含んだ文字列をスマートに正規表現で扱えるようになったわけで、これも多くの人に受け入れられたアイデアですよね。ほとんどの言語の正規表現で採用されているのではないでしょうか。
ところが、今回そのナイスな発明である/sや/mについて「Perl6では不要になるよ!新作の方がカッコいいから、みんなもPerl6の正規表現を盗んでね!」と言っていたのが面白かったですね。今でも十分ナイスで完成されてると思っていたんですが、Larry Wallはより良い正規表現を常に考えてるんでしょう。実際に他の言語で採用されるかどうかは疑問ですが、とにかく面白いオッチャンだなー、と思いました。
あと、Perl6では正規表現ごとにDFAとNFAが選べるよ、なんて話もしてましたね。そんな機能を使いこなせる奴がどんだけ居るんだよ!つーかアンタどんだけ正規表現好きなんだよwwwとか心の中でツッコミつつ話を聞いてました。
他にもsub-languageの話題とか、LTM vs Polymorphismとかの話題も印象に残っているんですが、正規表現の素晴らしさに比べれば瑣末な話題でしょう。むしろ、正規表現は素晴らしすぎるので、Perl6では正規表現を単なる言語構造からsub-languageに格上げするよ、という意味なのかもしれません。
つまりPerl6の新機能は全て正規表現のための機能だったんだよ! Ω ΩΩ<な、なんだって−!
僕の認識には妙なバイアスがかかっている可能性が大ですので、あまり鵜呑みにしない方がいいかもしれません。とにかく結論としては生Larry Wallが見られて良かったぞ、ってことですね。これは僕以外の人も同意してくれるんじゃないかと思います。