質問: コンパイルとトランスパイル 違いを探していると、これらの定義に出会いました。コンパイルは、ある言語で記述されたソースコードを別の言語に変換するための一般的な用語です。transpilingは、ある言語で記述されたソースコードを取得し、同様のレベルの抽象化を持つ別の言語に変換するための特定の用語です。私は抽象化とは何かを理解しています。しかし、上記の定義で「類似レベルの抽象化」とはどういう意味ですか?そして、言語の抽象化レベルをどのようにして見つけるのでしょうか?
回答: あなたが上で引用した定義は、初心者には完全に理解するには一般的すぎるので、実際に見られるものに単純化させてください。コンパイラ:は、ある言語で記述されたソースコードを取得し、他の言語で(または多数の)出力ファイルを生成するプログラムを説明する包括的な用語です。実際には、主にこの用語を使用して、入力としてcコードを取り込み、出力としてバイナリ実行可能ファイル(マシンコード)を生成するgccなどのコンパイラを説明します。transpilersは、ソースからソースへのコンパイラとしても知られています。したがって、本質的には、ソースコードファイルを取り込み、それを他の言語または異なるバージョンの別のソースコードファイルに変換するコンパイラのサブセットです。同じ言語の。出力は一般に人間に理解されます。この出力は、マシンで実行できるようにするために、コンパイラーまたはインタープリターを経由する必要があります。トランスパイラーの例: emscripten :c/c++をjavascriptに変換します babel :es6 +コードをes5にトランスパイルします(es6とes5はjavascript言語の異なるバージョンまたは世代です) さて、「類似の抽象化レベル」とはどういう意味ですか:ソースファイルにコンパイル/トランスパイルすると言ったように、アセンブリ言語もソースファイルであり、したがってgccもトランスパイルであると主張できます。したがって、この議論は、この類似したレベルの抽象化が無効にするものです。言語を下位、中間、および上位レベルに分類するという概念は、機械/アーキテクチャの実際の動作から提供される抽象化のレベルに基づいています。assemblyなどの低レベル言語は、プロセッサアーキテクチャに非常に近い、つまり、プロセッサごとに異なる命令を持っています。 c/c++/java/javascriptでは、これらすべてを抽象化することにより、抽象化が強化されます。したがって、トランスパイラーは、この抽象化の用語で開始した言語に近い言語(または、低中高レベルの言語ラダーでその言語のレベルに近い言語)にコンパイルします。お役に立てれば!