プログラミング言語の力における限界生産力逓減の法則とライブラリと

ひがやすをさんのブログより。

俺からみると、PHPでさくっとできることは、たいていのLLで、同じようにさくっとできる気がする。デフォルトで用意されている呪文を一発唱えればいいという話も、そんな呪文を移植すればいいだけの話。移植もそんなに難しくはないでしょう。
PHPを叩く人にガツンと申し上げたい - yvsu pron. yas

いやあ、その、「移植もそんなに難しくはない」呪文が最初からお仕着せで備わっているのがPHPのよいところなのではないでしょうか。たとえそれが

山のような、しかし相互に関連しない関数。そして一貫性のない関数名。後のことを考えない、つぎはぎだらけの仕様
404 Blog Not Found:教科書はいらない - 書評 - PHP逆引きレシピ

だったとしても。

書籍プログラミング言語を作るにも書きましたけど、言語の力ってのは結局のところほとんどライブラリの力で決まってしまうところがあります。

ポール・グレアムいわく、

あなたがプログラムの全てを機械語で書くと言い出したら、誰もがそれは間違いだと言うだろう。しかし、同じ原理だが見過ごされがちな一般法則がある。もしあなたがいくつかの言語を選択することができて、他の条件が同じ場合、最も力のある言語以外を選択することは間違いなのだ [注3]。
(中略)
機械語は非常に低レベルだということは誰にでもわかる。しかし、少なくとも社会的な慣習として、高級言語は対等であるとされることが多い。そんなわけはない。「高級言語」なんて用語は何も定義しない。一方に機械語を、もう一方に他の全ての高級言語を隔てる線なんてありはしない。プログラミング言語はそれぞれが、機械語から最も力のある言語までの連続した抽象度のスペクトルのどこかに位置するのだ [注4]。
(中略)
でも、この考えが結論のところまで辿られることは滅多にない。ある年齢に達すると、プログラマーは自分から使う言語を変えることはほとんどなくなる。何の言語を使っていようと、これで十分だと思ってしまうのだ。

プログラマは自分の好みの言語を深く愛する質だし、私は誰も傷つけたくないので、ここで仮想的なプログラミング言語「ほげ」を使って私のポイントを説明しよう。「ほげ」は抽象度のスペクトルのちょうど真中に位置するものとする。最もパワフルな言語ではないけれど、Cobol機械語よりはパワフルだ。

そして、仮想的な「ほげ」プログラマ氏は、Cobol機械語も使わない。もちろん機械語なんて使わない。あれはコンパイラのためのもんだ。それにCobolだって、あれで何かをきちんと動かしたことがあるって人を知らないよ。結局のところ、「ほげ」にある機能xが無いもんな。

このプログラマ氏がパワーのスペクトルを見下ろしている時、彼にはそうしているという自覚がある。「ほげ」よりも力の弱い言語は、明らかに力が弱い。彼が慣れ親しんだ機能が無いからだ。しかし、このプログラマ氏が反対の方向に目を転じた時、彼は自分が見上げているのだということに気付かないのだ。彼が目にするのは、変てこりんな言語ばかり。多分、それらは「ほげ」と同じくらいパワフルなんだろうけど、どういうわけかふわふわしたおまけがいろいろついているんだ、と思うだろう。彼にとっては「ほげ」で十分なのだ。何故なら彼は「ほげ」で考えているから。
Beating the Averages

とのことですけれども、おそらくこの「言語の力」には限界生産力逓減の法則が効いていると思います。機械語の生産性を1とするなら、FORTRANの生産性は10、Cなら13(領域破壊を決して起こさないCなら15)、Javaなら16とか。言語にクロージャがあれば、確かにそれがないよりは生産性が上がるのでしょう。でも、それは、機械語FORTRANになったときほどの効果はないのではないかと。仮にも自作言語を作っている私としては、面白くない結論ではあるのですが。

それに対し、ライブラリの充実度は、「ある機能がほしいときにそれを作らなくてよい」というきわめてわかりやすい算数により、地道に生産性を向上させます。nl2br()などという得体の知れない関数が名前空間のトップレベルに居座っている、というのはJavaとかのプログラマにとっては許しがたいかと思いますが、Webアプリを作るうえでは確かに便利です。そんなライブラリはすぐに作れる、というのはそのとおりでしょうが、そういうライブラリなりフレームワークなりが乱立するのは特に初心者ユーザにとって望ましい状態ではありません。もちろん開発者にとっても、リソースが分散されるだけ損です。PHPはこれが最初から組み込みなので、その点少なくとも実用的ではあると思います。

ていうか、特定用途向け・初心者向けには優れているが、言語仕様としてタコな言語の実例を挙げるなら、PHPなんぞよりHSPのほうがずっとひどいでしょう。でも、こんな言語ですら、一定数のユーザがいるわけです。実のところ言語のよしあしなんてのは一部の言語オタクを除きどうでもよいことなのかもしれません。

とはいえ、ライブラリ等の使い勝手が同等であるなら、アレな言語よりまともな言語の方がよいに決まっている――と思い……ます。
いや、実はこのへん、まつもとさんの

私の知りたいことは、HSP(というツール)が評価されている(としたら、その)理由だ。さらにその評価が

HSP(という言語)だから評価されているのか
HSP(という言語)なのに評価されているのか
という点が興味がある。
Matzにっき(2004-09-27)

というのと似た疑念を私も持っているのですけれども。
ゲームのシナリオ記述言語として、NScripterという言語がかなり使われているようですが、この言語では変数名が連番です。正直なところ私の感覚では許しがたいというか、これでユーザは不便に思わないのか、と思うところですが、使う人がいる以上、それで不便を感じていない(むしろその方が便利だと思っている)ということなのでしょう。

言語を作る立場としては、着地点を見極めるのは、なかなか難しそうです。

Diksamは、Java程度にまともな言語で、HSP程度に手軽な言語を目指しているのですけれども。