Java: Evolutionary Dead End

TSS 経由で到達。

「If Java is to be saved at all, it needs to become like C; a workhorse that you can rely upon.」という一文には説得力があるなぁ。Java の静的な強い型付けっていう特徴は、多少コストが掛かっても安心して利用可能なインフラストラクチャの構築という側面では大きなメリットとなるし。

C の場合、「C だからこそ」という強みがある。「C(と、C から呼び出し可能なアセンブリ言語の断片)でしか実装出来ない」プログラムはあっても、「Java でしか実装出来ない」プログラムは基本的には存在しない(JNI を使えばまた別とは言え)。でも「言語のチカラ」という側面を考えれば、C と Java のどちらでも可能なモノを実装するなら Java を選びたい。もちろん「言語のチカラ」だけを考えれば、Java じゃなくてより「チカラの強い」言語のほうが有利だけど、現在の Java でも大抵の局面でなら速度 / 生産性ともに十分だしね。

Feature Junkies は「他の言語で実現されている『素敵な機能』は Java にも取り込むべし」と考えるのかもしれないけど、Java 5 の Generics の例を持ち出すまでもなく、互換性を維持しようとすればどうしても中途半端な取り込みになることは避けられない。新しいアイデアは何でもかんでも取り込めるのにも関わらず、言語そのものの基本構造が変化しない Lisp のような言語ならまだしも、Java の場合は新しい構文を用意するのに文法は変えなくちゃならないわ、場合によっては過去との互換性が維持出来ないわってのが辛い。要するに、魅力的な「チカラ」は言語の設計時点で入れなくちゃならない。

Bill JoyJava にクロージャを取り込んどけって言ってたらしいけど、そうしなかったのは Java の設計時のポリシーに従った判断のはず。その判断を「最近のプログラマはみんなクロージャクロージャって叫んでるからやっぱり入れようぜ」ってことでネジ曲げるのは、やっぱり無理だしおかしいんだよなぁ。

リンク元では Generics の取り込みを「remarkably coincidental with the appearance of generics in C#」と評しているけど、骨格が固まってしまった言語にあとから色々なものをブチ込んでしまうのは、その言語が目指していたモノをおかしくし、言語そのものをグロテスクな存在にしてしまう気がする。Perl 4 から Perl 5 に私が移行出来なかったのは、結局 Perl 5 がグロテスクなものに見えたからじゃないだろうか…って言い訳?。