JavaScriptってJavaにそっくりだよね

JavaScriptJavaは、違う言語である。それは間違いない。

しかし、「JavaScriptはもともとLiveScriptという名前だったのが、マーケティングの都合だけでJavaScriptに改名されたんです! その名前以外、Javaとは共通点は一つもありません!! JavaJavaScriptはメロンとメロンパンくらい違う!!!」と言われると、それはそれでちょっとおかしいだろう、と思う。「JavaJavaScriptはメロンとメロンパンくらい違う!!!」のところは、インドとインドネシアとか、すっかり大喜利状態になっているけれど、そんなふうに「まったく違う言語」と言い切るには、JavaScriptJavaにあまりにも似すぎている。

gist.github.com

togetter.comこれは、「どちらもC言語を先祖としているから……」といったレベルの話ではない。

web.archive.org

JavaがCに類似する構文を持っているのと同程度に、JavaScriptJavaの構文は似ています。しかし、JavaがCのサブセットではないように、JavaScriptJavaのサブセットではないのです。

Cが先祖である、程度の理由で、文字列のメソッドのstartsWith()とかcharAt()とかlength()とか、そんなことまで一致するはずがない。JavaScriptはあからさまにJavaに似せて作られている。

JavaScriptはもともとLiveScriptという名前でー! マーケティングの都合で―!!」と言いたがる人たちは、LiveScriptなる言語がいったいいつから存在したと思っているのだろう? LiveScriptは、そのさらに前にはMochaと呼ばれていて、Mochaが作られたのはJavaの登場より後だ。Mochaがコーヒーの名前であるあたり、明らかにJavaを意識している。このあたりの話は、JavaScriptの作者であるブレンダンアイク自身が、以下のように語っている(JavaScript Ten Years)。

Javaは、高価なコンポーネントウィジェットのためであるのに対し、Mochaは、Webデザイナー向けの言語である、と言っているわけで、JavaScriptは「Javaスクリプト言語版」であるという、メロンとメロンパンの人たちが否定する位置づけは、それなりには根拠があるように思える。何しろ、JavaScriptは、JavaのDateクラスの2000年問題のバグまでそっくり似せて作られている*1

f:id:kmaebashi:20210704234454p:plain

確かに、JavaScriptは、関数がファーストクラスオブジェクトであったりレキシカルクロージャがあったりと、プログラミング言語の進化の系統樹からすれば、C→C++Javaという系統よりも、Lispから取り入れたものが多い言語だとは思う(あとは、プロトタイプオブジェクト指向言語として、SELFとか)。しかし、それにしても、これほどあからさまに「似せて作られた」ことを無視して「メロンとメロンパン」とか「インドとインドネシア」とか言い募るのは、あまり誠実な態度とは言えないんじゃないですかね。

参考ページ:

https://www.markupdancing.net/archive/20081111-083300.html

 

――というようなことも、「完全初心者のためのプログラミング入門」には書いておりますよ! という宣伝でした。

kmaebashi.com

はじめに――完全初心者のためのプログラミング入門

*1:2021年現在、getYear()が121を返すことだと思われる。