web-dev-qa-db-ja.com

コンパイラー対インタープリター対トランスパイラー

私が出席していたreactJsセッション中に、プレゼンターはコード変換/移植の発生に用語トランスパイラーを使用しました。言語コードをコンピューターシステム/マシン上で実行可能な形式に変換する場合、コンパイラーとインタープリターという用語を常に使用し、聞いてきました。 Transpilerは私にとってまったく新しいものです。トランスパイラーがコンパイラーやインタープリターとどのように違うのか、なぜそれが本当に必要なのかを誰かが理解するのを手伝ってくれますか?

39
RBT

この Wiki記事 で述べられているように、これは、あるプログラミング言語から別のプログラミングにソースコードを変換するコンパイラーの一種です言語。ソースコードは、使用されなくなった言語であるか、最新のハードウェア/ソフトウェアの進歩をサポートしていないか、プログラマーの利便性/好意によります。

VB6からVB.NETへのコンバーターは、トランスパイラーと考えることができます。 COBOL to C#/ C++/Javaツールをトランスパイラーと考えるかもしれません。

23
Ajay

コンパイラ-コードをより低いレベルのコードにコンパイルします。

例:

  • "Developer code"-> "Machine code"
  • PHP-> C
  • Java-> bytecode

Transpiler-コードを同じレベルのコード/抽象化にコンパイルします。

例:

  • "Developer code"-> "Another developer code or version"
  • JavaScript ES2015+-> JavaScript ES5

インタープリター-上記の2つと同じクラス/リーグ/コンテキストではないコードを解釈します。

例:php.exe

  • 「あなたのPHP内のコード/スクリプトindex.php "->" htmlへの結果、または純粋なindex.html "
25
Jim M

CoffeeScriptやTypeScriptなどのJSプリプロセッサを使用してコードをプレーンJavaScriptに変換する場合、「トランスパイリング」と呼ばれます。しかし、それは本当にJS専用のものではありません。あらゆる種類のプログラミング言語に適用されます。ほとんどの場合、単にコンパイルと呼ばれます。

Transpilingは、ある言語で記述されたソースコードを取得し、類似レベルを持つ別の言語に変換するための特定の用語です抽象化の

https://www.stevefenton.co.uk/2012/11/compiling-vs-transpiling/

あなたの場合

  • 'compile'JSX => JavaScript(およびHTML)。これは上記の定義と一致すると思います。
  • したがって、「トランスパイル」と呼ぶことができます。 「コンパイル」と呼ぶこともできますが。

もう一つの例:

  • CoffeeScript/TypeScript/... whatEverScript .. => JavaScriptおよびその逆。
18
fuma

1980年代からそのようなツールを構築しています

それらを「ソースからソースへ プログラム変換システム 」と呼びました。

その用語は、約45年間、AFAICTで問題なく機能しました。アイデアはそのはるか以前に遡ります。このアイデアの1963バージョンについては、Val Schorreの Meta II Compiler-compiler work を参照してください。

これで新しい用語ができました。数年前に見始めました。何も追加しませんが、神秘的でクールに聞こえます。これが司祭の価値を確立する方法です。古いアイデアの新しい語彙を生み出します。

7
Ira Baxter

ソースからソースへのコンパイラーは、ほぼ同じレベルの抽象化で動作するプログラミング言語間で変換しますが、従来のコンパイラーは、高レベルのプログラミング言語から低レベルのプログラミング言語に変換します。

ソース: Wikipedia

  • Compiler-ソースコードを高レベル言語から低レベル言語に翻訳します。
    :Cコンパイラ(Cからマシンコード)、JDKのjavacツール(Javaからバイトコード)
  • Transpiler-同じレベルの抽象化でソースコード間を変換するコンパイラのタイプ。
    :Babel(ES6 + to ES5)-これは、IE 11以下。
4
SmS

定義によりtranspilertranslatorの特別な形式です。

コンパイラは、高レベルのソースコードを低レベルの抽象化のコードに変換します。通常、必ずというわけではありませんが、コンパイルの目標はマシンコードです。つまり、CPUによって直接実行できるコード。コンパイラは、マシンコードのシミュレーションであるbytecodeを生成することもできますが、仮想マシン(Java bytecode and Java VM)。compilerという用語は、コードを、マシン実行可能コードではない別のプログラミング言語に変換するaに適用できます。

翻訳者ソースコードをあるプログラミング言語から別のプログラミング言語に変換します同じまたは異なる抽象化レベル。ソースコードもマシンコードである場合、結果はマシンコードになる可能性があることに注意してください。

Traspilerは翻訳者に非常に似ていますが、具体的には同じ抽象化レベルのプログラミング言語間でソースコードを変換します。プログラミング言語は異なっており、抽象化されているものが多いことに注意してください。抽象化としてサポートするさまざまな概念に適用されるため、特に抽象化のレベルが異なります。そのため、変換(翻訳)は、多くの場合、同じレベルの抽象化ではなく、類似の間にあります。

2
Valera Grishin

コンパイラ-人間の理解言語を機械理解言語に変換するための、人間とコンピューターの間のインターフェースとして機能します。

コンパイラの種類

  • ネイティブコードコンパイラ:同じタイプのプラットフォームのみのソースコードをコンパイルするために使用されるコンパイラ。このタイプのコンパイラによって生成された出力は、コンパイラ自体が実行されているのと同じタイプのコンピューターシステムおよびオペレーティングシステム(OS)でのみ実行できます。
  • クロスコンパイラ:さまざまな種類のプラットフォーム用のソースコードをコンパイルするために使用されるコンパイラ。複数のプラットフォームで使用できる組み込みシステム用のソフトウェアの作成に使用されます。
  • ソースからソースへのコンパイラ:変換[〜#〜] hll [〜#〜](高レベル言語)またはソース言語から[〜#〜] lll [〜#〜](低レベル言語)または機械語。
  • Transpiler:変換[〜#〜] hll [〜#〜](高レベル言語)から別のHLLへ
2
Jeyanth