web-dev-qa-db-ja.com

Babelはコンパイラーまたはトランスパイラーですか?

私は Babel をしばらく使用しており、Babelはtranspilerであるという印象を受けていましたES6およびES7 JavaScriptをES5 JavaScriptに変換するため、ES5とES6を2つの異なる言語として技術的に扱うことができるという仮定の下でした。

ただし、BabelのWebサイトのタイトルにはcompilerと記述されていることに気づかずにはいられませんでしたが、これはtranspiler

Babel website title - 'Babel - The compiler for writing next generation JavaScript

Babelはtranspilerまたはcompiler、またはおそらく両方のオプションを提供していますか?または、ウェブサイトのタイトルは単に間違っていますか?

開示:これは非常につまらない質問のように聞こえますが、バベルに関連するドキュメントを書いているので、説明が正確であることを確認したいです

25
AdamMcquiff

「トランスパイラー」と「コンパイラー」の定義はぼやけています。両方とも translate 動作を維持しながら、ある言語から別の言語へのプログラムを実行します。

通常、実行可能なバイナリを生成するときは「コンパイラ」と名付けます。ただし、バイナリは別の言語であり、CPUが解釈できます。すべてのプログラムは、それぞれのマシンで「実行可能」です。

入力よりも低レベルの出力を生成する場合、通常は「コンパイラ」と名付けます。 Cからアセンブラー。またはJava to Javaバイトコード。またはES8からES5。待って…それは本当に異なるレベルですか?

通常、出力が入力と同様のレベルにある場合、「トランスパイラー」と名付けます。 Python JavaScriptまたはその逆)。ただし、一方の言語で利用可能な抽象化を使用する部分は、常に他の言語の下位レベルの実装に「コンパイル」する必要があります。

質問に答えるには:

コンパイラはトランスパイラーとは非常に異なるものだと思います。

いや.

Babelはトランスパイルまたはコンパイラですか、あるいは両方のオプションを提供していますか?

はい。

または、ウェブサイトのタイトル「Babel-次世代JavaScriptを作成するためのコンパイラ」は単に間違っていますか?

いいえ。そのタイトルは次世代の機能、つまり、非常に異なる出力にcompiledする必要のある高レベルの抽象化に焦点を当てています。出力はまだ普通ですが、ほとんどが人間が読めるJavaScriptです。

Babelに関連するドキュメントを書いています。説明が正確であることを確認したい

その場合、私は公式ウェブサイトから独自の用語を使用します。ツールを他のツールと比較したい場合は、独自の説明を選択してください。

39
Bergi

トランスパイラー、またはソースからソースへのコンパイラは、あるプログラミング言語で記述されたソースコードを読み取り、別の言語で同等のコードを生成するツールです。

Babelはトランスパイルとコンパイラの両方であり、これらの語は同じ意味で使用できます。

1
Dennis

Babelは transpiler で、これは compiler の特殊なタイプです。したがって、両方の用語は技術的に正しいです。お好みでどちらを使用してもかまいません。

Babelが source-to-sourceコンパイラ(別名transpiler) であることは反論の余地がありません。ソース言語とターゲット言語の両方がJavaScriptのフレーバーであるためです。

ソースからソースへのコンパイラ、トランスコンパイラ、またはtranspilerは、1つのプログラミング言語で記述されたプログラムのソースコードを入力として使用するコンパイラの一種です。他のプログラミング言語で同等のソースコードを生成します。

ただし、用語間の区別が役立つことに全員が同意するわけではないため、一部の人々は単に「コンパイラー」を好む。

私は個人的にこの区別が好きです。なぜなら、それは、ソース(入力)言語とターゲット(出力)言語の間の機械言語と抽象化レベルの違いについて何かを暗示しているからです。つまり、典型的な「コンパイラ」は高レベルから低レベルの言語から翻訳し、「逆コンパイラ」は低レベルから高レベルの言語から翻訳し、「トランスパイラ」は類似した抽象レベルの言語間で翻訳します。

1
maerics