2023-09-06
今日から有給明けて仕事に復帰した。リモートワークで少し緩めに働けた。気温が低いからか今までとちょっと違う気分だった。同期のノリも少し変わっていて、前よりもっとはっちゃけた感じになったと思う。どんどん楽しくなる。
昔、コンパイラとインタープリタの違いがわからなかった。コンパイラはプログラムを機械語とかの低級な言語に落とすやつのことで、インタープリタは落とすかどうかは知らないけど、実行するやつのこと。コンパイルしてもどうせ動かすのだから、cpuとセットで考えたらどっちも同じようなものだろと思っていた。
そういうわけで、コンパイラとインタープリタの分かれ目がどこにあるんだろうか(、いやない)みたいな気持ちを抱いていた。ちょうどjitコンパイラを知ったタイミングだったのもあり、この辺りの知識がこんがらがっていた節がある。あの頃の僕のために今の理解を書いておく。
- コンパイラ: プログラムを低級な言語(主に機械語やアセンブリ、バイトコード)に変換するやつ
- インタープリタ: (主に高級な言語で書かれた)プログラムを実行するやつ
- パソコンは機械語のインタープリタだというのは、まあそうかなと感じる。物理的なインタープリタ。
- トランスパイラ: プログラムを別の言語に変換するやつ。コンパイラと大体同じ意味だけど、トランスパイラはターゲットがコンパイラよりも高級な雰囲気がある
- JITコンパイラ: 最近のインタープリタに組み込まれているコンパイラ。最適化のために、普通にプログラムを実行する代わりに(多くの場合入力に制約をつけた)プログラムの一部をコンパイルして実行するときに使われる。