はじめに
こんばんは。
本記事はProgaku Advent Calendar 2022 5日目担当のハヤシと申します。
なぜコンパイル方式、インタプリタ方式などが存在するのか?
第一前提として
プログラミング言語は人間が機械語(マシン語)を生成するために用いるツールです。
なので、これらのプログラミング言語で書かれたコードは、人間にはある程度分かりやすくても、コンピュータには全く理解できない文字列なのです。
コンピュータが理解できるのは、「0」と「1」で書かれた「機械語」と呼ばれるものです。
最終的には、プログラミング言語で書かれたコードは機械語に### 翻訳されてから実行されています。
コンパイル方式とは
-
ソースコード(プログラム)を一旦すべて機械語(バイナリコード = 0,1)に翻訳して、その機械語になったプログラムを実行する方式です。
-
簡単に表すと英語で書かれたスピーチ内容をすべて日本語に翻訳してから文章を読み上げるイメージです。
例
C, C#, C++, Java, Goなど
インタプリタ方式とは
-
プログラミング言語の命令を一つずつ直接インタプリタに渡し、そのソースコードを直接解釈しながら実行する方式で、解釈実行方式とも呼ばれます。
-
ソースコードをインタプリタに渡してから内部的には中間コードなどに変換されている場合がありますがユーザーはそれを意識する必要はありません。内部の変換がどうなっているかは関係なく、ソースコードを直接解釈しながらプログラムを実行します。
-
一行の記述ごとに変換と実行が並行して行なわれるため、コンパイラのように実行用ファイルは作られません。その代わり、実行時には毎回ソースコードを必要とします。
-
簡単に表すと英語のスピーチを一つずつ横にいる通訳さんに翻訳してもらいながら文章を読んでいくイメージです。
例
Ruby, Python, JavaScript, PHPなど
メリット・デメリット
コンパイル方式
メリット
- 一度すべて翻訳してからプログラムの実行することによって実行速度が速い
デメリット
- プログラムの実行に手間と時間がかかる
(プログラムがすべて完成するまで実行結果を確認できないため)
- プログラムのデバッグが行いづらい
(コンパイラ型言語は、プログラムをまとめてコンパイルするので、エラーにもまとめて対応しなければならない)
インタプリタ方式
メリット
-
プログラムのデバッグが行いやすい
-
作成したプログラムをすぐに実行・確認できる
(Webサイトの画面を作るときでも、書いたコードをすぐに実行することで、画面デザインを確認しながらプログラミングを進められます)
デメリット
- コンパイラ型言語と比較して実行速度が遅い
(「今の命令を読んで実行→次の命令を読んで実行」というように、記述されたプログラムを一つずつ実行するため)
- 処理速度が求められるシステムには向いていない
結局何が違うのか?
結論から
「一括で全て機械語に翻訳するか」「一回一回機械語に翻訳しながら実行していくか」
ということでした。
それぞれ向き不向きなどあるので、今後開発していくにつれて何が一番適しているのか考える必要がありそうですね。
以上になります。