[解決済み】コンパイル言語とインタープリタ言語の比較
質問
違いについて理解を深めたいのですが。ネットでいろいろな解説を見つけたが、実用的な意味合いよりも抽象的な違いに目が行きがちだ。
私のプログラミング経験のほとんどは、CPython(動的、インタプリタ)とJava(静的、コンパイル)です。しかし、インタプリタ型やコンパイル型の言語には他にも種類があることは理解しています。コンパイル言語で書かれたプログラムから実行ファイルを配布できることは別として、それぞれにメリット・デメリットがあるのでしょうか?よく、インタプリタ型言語は対話的に使えるという主張を聞きますが、コンパイル型言語にも対話的な実装は可能ですよね?
どのように解決するのですか?
コンパイル言語とは、一度コンパイルされたプログラムがターゲットとなるマシンの命令で表現される言語である。例えば、ソースコード中の足し算 "+"演算は、そのまま機械語の"ADD"命令に翻訳することができます。
インタープリタ型言語とは、命令がターゲットマシーンによって直接実行されるのではなく、他のプログラムによって読み取られ実行される言語です(通常 は ネイティブ・マシンの言語で書かれている)。例えば、同じ "+" 操作を実行時にインタープリタが認識し、適切な引数で自身の "add(a,b)" 関数を呼び出し、マシンコードの "ADD" 命令を実行することになるのです。
解釈言語でできることはすべてコンパイル言語でもできますし、その逆もまたしかりで、どちらもチューリング完全言語です。どちらもチューリング完全言語です。しかし、どちらも実装や使用において利点と欠点があります。
完全に一般化してしまいますが(純粋主義者の方、お許しください!)、大雑把に言って、コンパイル言語の利点は以下の通りです。
- ターゲットマシンのネイティブコードを直接使用することによるパフォーマンスの向上
- コンパイル時に非常に強力な最適化機能を適用することができます。
そして、インタプリタ型言語の利点がここにあります。
- 実装が簡単 (良いコンパイラを書くのはとても難しい!!)
- コンパイルステージを実行する必要がない:コードを直接 "オンザフライ" で実行することができる。
- 動的な言語ではより便利な場合がある
バイトコードコンパイルのような最新の技術では、さらに複雑さが増すことに注意してください。ここで起こるのは、コンパイラが、基盤となるハードウェアとは異なるquot;仮想マシン"をターゲットにしていることです。この仮想マシンの命令は、後で再びコンパイルしてネイティブコードを得ることができます(たとえば、Java JVMのJITコンパイラが行うように)。
関連
-
[解決済み] tempとは何ですか、またjavaにおけるtempの用途は何ですか?
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] 警告: コンテキスト初期化中に例外が発生 - 更新の試みはキャンセルされました。
-
[解決済み] android.support.v4.app.FragmentActivity' で 'TAG' がプライベートアクセスされている。
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] init-paramとcontext-param
-
[解決済み] Pythonが解釈される場合、.pycファイルとは何ですか?
-
[解決済み] 静的型付け言語と動的型付け言語の違いは何ですか?
-
[解決済み】Pythonはインタプリタか、コンパイルか、それとも両方か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] mavenのコンパイルに失敗するのはなぜですか?
-
[解決済み] javaでAnnotation Inheritanceのようなものはあるのでしょうか?
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] Eclipseでクラスとそれに対応するファイルの名前を変更する方法は?