PHPと(Perl|Python|Ruby)の違い

それは、PHPユーザーは他の言語から学んでいるのか、という点。

PHPユーザーが他の言語ユーザーよりも弱いのは、そこなのではないか。

404 Blog Not Found:「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い

弾さんから説得力のあるPHPへの批判記事が初めて出てきたので、それに対して自分なりに考えたことを記録に残しておきたくなりました。


つい先頃まで、PHP開発者のML internals@lists.php.net で起こっていた議論がちょうど良い例題に思えるので、まずそれを紹介しましょう。


id:rskyさんといえば、PHP拡張機能&Zend Engineハッカーとして日本のPHP界ではつとに知られている方ですが、昨年の11月末にPHPに無名関数を導入するZend Engineに対するパッチを作成されました。


Zend Engineをハックしてみた - 讃容日記


時を同じくしてちょうど internals でも無名関数導入の議論が行われていたのを知ったid:rskyさんは、自分のパッチをinternalsに提案します。


php.internals: Re: PATCH: Implementing closures in PHP


一部の人の肯定的な反響はあったものの、その後の議論は続いていない状態です。というのもid:rskyさんが投げたもうひとつのパッチ、

array(1, 2, 3)

[1, 2, 3]

のようにも記述できるようにするパッチが大激論を呼んでしまったので、無名関数+クロージャパッチの方は現在放置状態になっています。arrayパッチのほうも、逆に閲覧性が悪くなるという反対意見が案外多く、現在はこう着状態です。


それで、そのarrayパッチへの反応やそれ以前の無名関数の議論を読み直していて私が感じたことは、

言語としての利点が多いことが、すべての人にとって良いことではない。

ということです。


おそらくPHPの文化ではその辺のバランスを、現状を変えない方向に振るように、暗黙の圧力が働くようです。そこに独裁者は存在せず、ゆるい合議で物事が決まっていきます。実際に上記の例でも、PHPの作者として名前が挙がるRasmus Lerdorfはarrayパッチに対して賛成の意見を表明していますが、議論はこう着状態ののまま結論は出ていません。そのような圧力の中では、多くの人が明確に利点と思わなければ、ドラスティックな改善はなかなか受け入れられません。しかし逆に考えれば、一般の人から一見とっつきの悪い、プログラミングの難解な概念を習得しなくても、そこそこには使える言語として成熟していくことになります。


弾さんのように、プログラミング言語は欠点が少ないほど良いと考える「学び続けたい」人にとっては、PHPは物足りなさが炸裂している言語だというのはしっくり来ます。でもそれは目指す方向が違うだけで、どちらが悪いわけではないのではないかと私は思います。


もう一点。

PHPの「サクセスストーリー」をよく見ると、初心者が腕を磨いてというのではなくて、むしろ他の言語でならした手練がPHPのいいところだけを使ったというものが目立つ。ニコニコ動画なんてその最たるものだろう。そしてこういうユーザーがPHPに「再投資」するというケースはあまり目立たない。ここで言う「再投資」は、ある言語に助けられた人が、その言語に対して「利用」以上の貢献するということである。PerlにはCPANが、RubyにはGemsが「再投資の受け皿」としてある。それでも満足できない人は、開発者MLが待っている。Pythonはこの点がPerlRubyに比べて弱いように見受けられるが、それでもPHPほど「使いっぱなし」は目立たない。

404 Blog Not Found:「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い

この「PHPに「再投資」するケースはあまり目立たない」というのは、アプリケーションやサービスを開発した人が、PEARPECLなどにコードを公開していないとか、開発者MLに入って発言していないということを言いたいわけでしょうか?


それは認識が大きく私とは異なりますね。


CPANほどではありませんが、PEARPECLはソースリポジトリとしてはずいぶん大きなものに成長していますし、PEARプロトコルに準拠している野良リポジトリはそれこそ世界中にあります。すべてがphp.netに集中しているわけではありませんが、各自がおのおのの手段でソースを公開してコミュニティに貢献しているわけで、「再投資の受け皿」はふんだんに用意されています。PHPが「使いっぱなし」というのは少し違うでしょう。


今回の議論で、PHPの文化というものが自分の中にもようやく明確になってきた気がします。自分も個人的にはもっとストイックに利点を追求する文化の方が好みではあるので、その辺の楽しみは他の言語で追求することにしましょう。例えばActionScriptとか。