プログラミング言語にはどのような種類があるのでしょうか?
各プログラミング言語は、さまざまな点で次の言語とは異なります。最大の違いの 1 つは、プログラムの実行方法です。
プログラミング言語を区別する方法はたくさんあります。まず、それらは関数型、オブジェクト指向など、さまざまなパラダイムに分類されます。
また、言語のパフォーマンスに大きな影響を与える翻訳方法によってプログラミング言語を分類することもできます。コンパイルされたプログラミング言語は、通常、インタープリタされたプログラミング言語よりも高速です。そのため、ゲーム開発などスピードが求められる状況では、開発者はコンパイル言語を使用する傾向があります。
翻訳とは何ですか?
変換プロセスでは、プログラマーが書いたコードをコンピューターが実行できるマシンコードに変換します。マシンコードは、1 と 0 を含む低水準言語の一種です。したがって、トランスレーターが行うことは、プログラミング言語で作成した高レベルのコードをマシンコードに変換することです。
翻訳者がいない場合は、機械語でコーディングする必要があります。あなたが知っている高級プログラミング言語はそれぞれ、コンパイラ、インタプリタ、またはその 2 つのハイブリッドという 3 つの変換方法のいずれかを使用します。
コンパイラとは何ですか?
コンパイラは、高級言語で書かれたソース コードを実行用の低レベル コードに変換するソフトウェアです。
上の図は、コンパイラを最も基本的な形式で表しています。コンパイラにはいくつかのフェーズがあります。各フェーズでは、コードをある状態から別の状態に変換します。コンパイラの各フェーズの目標は、後続のフェーズで操作しやすい出力を作成することです。コンパイラの一般的な構造は次のとおりです。
- スキャナ: このフェーズでは、文字のストリームを取得し、識別子や文字列リテラルなどを表すトークンにグループ化します。
- パーサー: このフェーズでは、ソース プログラミング言語の文法に基づいてトークンをグループ化します。プログラムを構成する式のコレクションである抽象構文ツリーを作成します。
- セマンティクス: このフェーズでは、抽象構文ツリー (AST) に対してセマンティクス分析を実行します。ソース言語のルールを使用して、AST 式に型を割り当て、その有効性をチェックすることで意味を追加します。 AST は中間表現になります。
- 中間表現 (IR): このフェーズでは、元のプログラムのソース コードをマシン コードに変換します。アセンブリ コードの簡略化されたバージョンが生成されます。 IR は 1 つ以上のオプティマイザーを使用して、IR コードを改善し、実行されているマシンの情報を収集します。オプティマイザーを使用すると、プログラムをより効率的、高速化、またはさらに小さくすることができます。
- コード ジェネレーター: このフェーズでは、最適化された IR コードを使用し、それをマシン コードに変換します。
コンパイラを使用するプログラミング言語はどれですか?
一般的なコンパイル済みプログラミング言語には次のようなものがあります。
- C
- C++
- 行く
- エイダ
- フォートラン
- COBOL
- リスプ
- 目的 C
- スウィフト
コンパイル言語を使用する利点の 1 つは、コンパイル中にエラーを識別できることです。これにより、そのようなバグを修正して、プログラムを再度コンパイルできるようになります。コンパイルされた言語は、実行を開始すると失敗する可能性が低くなります。これらの言語は、ソース コードに構文エラーがある場合、実行するプログラムを生成することさえできません。ただし、セマンティック エラーやその他の形式の実行時バグは回避されます。
コンパイルされた言語は、コンパイル後の実行も非常に高速です。
通訳者とは何ですか?
インタプリタは、一度に 1 行のコードを翻訳して実行するプログラムです。このプロセスは、インタープリタが指定されたプログラムまたはスクリプトのコードの最終行に到達するまで繰り返されます。
上の図からわかるように、インタプリタは 2 つの入力を受け取ります。まず、ソースコード (プログラム) 全体を取得します。次に、プログラムの最初の行を (入力として) 読み取り、変換し、実行します。その行が正しく実行されると、プログラムまたはスクリプトの次の行に進みます。
コンパイラとは異なり、インタプリタはプログラム全体をマシンコードに変換しません。代わりに、コードの特定の行を実行する前に解析して分析します。インタプリタは、コンパイラによる翻訳が完了する前に、プログラム (特に大規模なプログラム) の実行を開始する必要があります。
インタプリタを使用するプログラミング言語はどれですか?
一般的な解釈型プログラミング言語には次のようなものがあります。
- パイソン
- JavaScript
- パール
- MATLAB
- ベーシック
インタプリタはコードの実行をより速く開始しますが、エラーが発生すると失敗します。プログラマは、このようなエラーを修正してプログラムを再起動する必要があります。このイベントは、インタープリタが新しいエラーに遭遇するたびに発生します。まれな状況に関連する一部のエラーは、休止状態になる可能性があります。このような場合、テストはこれまで以上に重要になります。
通常、インタプリタはコンパイラよりも開発が簡単で、そのプログラムは設計上移植性が高くなります。
ハイブリッド翻訳とは何ですか?
ハイブリッド翻訳では、コンパイラとインタプリタが使用されます。ハイブリッド変換は、高レベルのソース コードをバイトコードなどの下位レベルの形式にコンパイルします。次に、インタープリターを使用してそのバイトコードを実行します。
ハイブリッド翻訳はプログラミング言語によって異なる場合がありますが、この一般的な構造が使用されます。ハイブリッド翻訳を使用する最も人気のあるプログラミング言語の 1 つは Java です。 Java コンパイラは、ソース コードを Java 仮想マシン (JVM) バイトコードに変換します。次に、インタプリタは JVM バイトコードをマシンコードに変換します。
ハイブリッド翻訳を使用するプログラミング言語はどれですか?
人気のあるハイブリッド プログラミング言語には次のようなものがあります。
- ジャワ
- C#
- ビジュアルベーシック
- アーラン
- F#
ハイブリッド翻訳を使用すると、両方の長所を活用できます。最初にコードをコンパイルすると、バグをできるだけ早く解決できます。ハイブリッド コンパイラーが作成するバイトコードは、高レベルのプログラム ソース コードよりも解釈が簡単です。
さまざまな翻訳方法を知ることの価値
特に新しいプロジェクトでその言語を使用する場合は、その言語で使用される特定の翻訳方法を理解する必要があります。言語の翻訳方法は、プログラミング言語のアイデンティティの主要部分です。プログラムの配布方法やユーザーによるプログラムの実行方法に影響を与える可能性があります。
それぞれの翻訳アプローチには独自のメリットがあります。 C++、Python、Java などの主要なプログラミング言語はすべて、異なる翻訳方法を使用しています。言語のパラダイムと並んで、その翻訳方法は、知っておくべき最も重要な特性の 1 つです。
プログラミング言語で使用できるパラダイムはいくつかあります。上位のプログラミング言語のほとんどはマルチパラダイム言語です。 2 つ以上の異なるパラダイムの使用をサポートします。最も人気のある 3 つのパラダイムは、命令型プログラミング、オブジェクト指向プログラミング、および関数型プログラミングです。