JavaでプログラムをしているしがないITエンジニアです。
Javaは「Write Once、Run Anywhere」が謳い文句のプログラミング言語です。
先日ふと、Java自身が何でできているんだろうかと気になったんです。
「Javaを作っているのは Java」と聞いたことがありましたが、これって矛盾しているなと感じたんです。
鶏が先か、卵が先か論争ってありますよね。卵がから鶏が生まれるから、卵が先なのか。その卵を産むのは鶏だから〜ってやつ。
Javaを作っているのはJava だとすると、じゃあそのJavaは誰につくられたん?って話です。(開発者ってことではなくって)
Javaはコンパイル言語なので、コンパイラーがあります。javacってやつ。
コンパイラは人が作ったコードを、機械が読めるように変換してくれるものです。各言語に存在しています。
コンパイルを行うことで、コンピュータが認識できる(正確にはJVMが認識できる)ようになり、初めてコンピュータが操作してくれるのですが、
このコンパイラ自体がJavaで作られたって言うんです。ハテナになりません?
コンパイラもプログラムです。誰かがコンピュータに命令して動いているはずなんです。Javaが作られる前に、Javaで命令するってどういうこと?神がもたらした?
調べました。
プログラミング言語を作るいっちばん初めに、違う言語でコンパイラを作るんですって。
「ブートストラップ技法」とかいうらしいんですが、
違う言語でコンパイラを作って、Javaのコンパイラをコンパイルするんだそうです。
その後、コンパイルされ、コンピュータ上で動くようになったJavaのコンパイラに、
Javaのコンパイラをもう一度コンパイルすれば、Javaで書かれて、Javaでコンパイルされたコンパイラができるという仕組みなんです。
ここでまた疑問がひとつ。
Javaのコンパイラははじめに何の言語で作られたのか。です。
調べてみると、「C++」でした。へーですね。
つまり、C++がJavaの生みの親とも言えるのかも。
じゃあC++は?
C言語だそうです。
じゃあC言語は?
アセンブリ言語だそう。アセンブリ言語は機械語(コンピュータが読める唯一の言葉で、0と1の組み合わせで描かれる)と1:1になっており、
人が機械語を書くのが大変で作ったそうです。
そして、アセンブリ言語のコンパイラは、人が機械語(0と1の並び)を書いて作ったそうです。(かれこれ70年以上前)
といった感じで殴り書きのように書いてしまいましたが、
プログラミング言語といえどシステムなので、他の何かに作られていて、その歴史は深く、連綿と受け継がれてきたということでした。
また少しだけ、プログラミングの奥深さ(闇深さ?)を知ることができてよかったです。