コンパイル型言語
コンパイル型言語(コンパイルがたげんご)とは、その実装の主体がコンパイラ(ソースコードからマシンコードを生成するトランスレータ)であり、インタプリタ(ソースコードを順次一つずつ実行し、ランタイム前の翻訳が行われない)ではないプログラミング言語である。
この用語はやや曖昧である。原則として、どの言語もコンパイラやインタプリタで実装できる[1]。両方のソリューションの組み合わせも一般的である。コンパイラはソースコードを何らかの中間形式(しばしばp-codeまたはバイトコードと呼ばれる)に変換し、それを実行するインタプリタに渡す。
メリットとデメリット
[編集]コンパイル時にネイティブコードにコンパイルされるプログラムは、実行時に翻訳されるプログラムよりも高速になる傾向がある。これは、翻訳プロセスのオーバーヘッドがあるからである。しかし、JIT(実行時コンパイラ)のような新しい技術、および翻訳プロセスの全般的な改善により、この差は小さくなり始めている。バイトコードを使用した混合ソリューションは、中程度の効率になる傾向がある。
低水準プログラミング言語は、一般的にコンパイルされる。特に、クロスプラットフォームのサポートより効率を重視する場合である。このような言語の場合、プログラムコードとマシンコードによって実行されるハードウェア操作の間には1対1の対応があり、プログラマが中央処理装置(CPU)とメモリの使用を細かく詳細に制御しやすくなる。
少し努力すれば、従来のインタプリタ型言語でもコンパイラを作成することが常に可能である。例えば、Common lispは、Javaバイトコード(Java仮想マシンによって解釈される)、Cコード(次にネイティブマシンコードにコンパイルされる)、または直接ネイティブコードにコンパイルできる。複数のコンパイルターゲットをサポートするプログラミング言語は、実行速度またはクロスプラットフォームの互換性のいずれかを選択するために、開発者により多くの制御を提供する。
コンパイル型言語の一覧
[編集]一般的にコンパイルされると考えられている言語は次のとおりである。
- Ada
- ALGOL
- ALGOL 60
- ALGOL 68
- SMALL
- ベーシック
- PowerBasic
- Visual Basic (バイトコードへ)
- PureBasic
- C
- C ++
- C# (バイトコードへ)
- クレオ
- COBOL
- コブラ
- Crystal
- D
- eC
- Eiffel
- Sather
- Ubercode
- Erlang (バイトコードへ)
- F# (バイトコードへ)
- Factor (後のバージョン)
- Forth
- Fortran
- Go
- Haskell
- Haxe (バイトコードまたはC ++へ)
- Java (バイトコードへ)
- JavaScript (バイトコードJITへ)
- JOVIAL
- Julia
- LabVIEW 、G
- Lisp
- Lush
- Mercury
- ML
- Standard ML
- Alice
- OCaml
- Standard ML
- Nim (C、C ++、またはObjective-C)
- Open-URQ
- Pascal
- Objective-C
- PL / I
- RPG
- Rust
- Seed7
- SPITBOL
- Swift
- Visual Foxpro
- Visual Prolog
- V(プログラミング言語)
- W
- Zig
ツール
[編集]脚注
[編集]- ^ Ullah. “Features and Characteristics of Compiled Languages” (英語). www.sqa.org.uk. 2020年9月4日閲覧。