1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プログラミング言語ってどうやって作ってるの?

Posted at

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年以上前)

といった感じで殴り書きのように書いてしまいましたが、
プログラミング言語といえどシステムなので、他の何かに作られていて、その歴史は深く、連綿と受け継がれてきたということでした。
また少しだけ、プログラミングの奥深さ(闇深さ?)を知ることができてよかったです。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?