違いを探しているときに、私はこれらの定義に出くわしました:
コンパイルとは、ある言語で書かれたソースコードを別の言語に変換するための一般的な用語です。
トランスパイルとは、ある言語で記述されたソースコードを取得し、同様の抽象化レベルを持つ別の言語に変換するための特定の用語です。
抽象化とは何かを理解しています。
しかし、上記の定義で「同様のレベルの抽象化」とはどういう意味ですか?そして、どのようにして言語の抽象化レベルを見つけるのでしょうか?
違いを探しているときに、私はこれらの定義に出くわしました:
コンパイルとは、ある言語で書かれたソースコードを別の言語に変換するための一般的な用語です。
トランスパイルとは、ある言語で記述されたソースコードを取得し、同様の抽象化レベルを持つ別の言語に変換するための特定の用語です。
抽象化とは何かを理解しています。
しかし、上記の定義で「同様のレベルの抽象化」とはどういう意味ですか?そして、どのようにして言語の抽象化レベルを見つけるのでしょうか?
回答:
上で引用した定義は、初心者が完全に理解するには一般的すぎるため、実際に見られるものに単純化してみましょう。
コンパイラ: 1つの言語で記述されたソースコードを受け取り、他の言語で(または多数の)出力ファイルを生成するプログラムを表す包括的な用語です。実際には、この用語は主に、Cコードを入力として受け取り、バイナリ実行可能ファイル(マシンコード)を出力として生成するgccなどのコンパイラを説明するために使用します。
トランスパイラーは、ソースツーソースコンパイラとしても知られています。したがって、本質的には、ソースコードファイルを取り込んで、それを他の言語または同じ言語の異なるバージョンの別のソースコードファイルに変換するコンパイラのサブセットです。出力は一般的に人間が理解できます。この出力は、マシン上で実行できるようにするために、コンパイラーまたはインタープリターを経由する必要があります。
トランスパイラーのいくつかの例:
さて、「同様のレベルの抽象化」とはどういう意味ですか。ソースファイルにコンパイル/トランスパイルすると言ったように、アセンブリ言語もソースファイルであり、したがってgccもトランスパイラーであると主張できます。したがって、この議論は、この同様のレベルの抽象化が無効にするものです。
言語を下位、中位、上位のレベルに分類するという概念は、マシン/アーキテクチャの実際の動作から提供される抽象化のレベルに基づいています。
アセンブリのような低レベル言語は、プロセッサアーキテクチャに非常に近い、つまり、プロセッサごとに異なる命令があります。C / C ++ / Java / JavaScriptの場合、これらすべてを抽象化して、より多くの抽象化を提供します。
したがって、トランスパイラーは、この抽象化の観点から開始した言語に近い(または、低中高レベルの言語ラダー内のその言語のレベルに近い)言語にコンパイルされます。
お役に立てれば!
これが答える一種の説明的な方法です
この例のように抽象化レイヤーを考えると:
(1) CPU-level (actual logic gates on the CPU)
(2)machine code
(3)assembly code
(4)[C/C++, JVM/bytecode]
(5)[JavaScript, Python]
コンパイラーはより低いレベル(より低い数)に移動します。トランスパイラーは、同じ番号で1つの言語(または言語のバージョン)から別の言語に切り替わります。
javac
コンパイラかどうか。
私はタパナナンドの答えにほとんど同意しますが...
言葉は「作られた」ので、目的を果たします。そして、これも時間とともに変化します。
現在、トランスパイラーを使用して、コードをソースコードに「より類似した」他のコードに変換するコンパイラーを指定する傾向があります。これはコンパイラーが行うことです。そして、ほとんどの場合、両方が同じコンテキストで言及されている場合に、両方を区別するために使用されます(ここでも、トランスパイル言語は少なくとももう一度コンパイルする必要があることを意味します)
したがって、すべてが非常に主観的です。この記事の執筆時点では:
そのため、現時点では、トランスパイルはほとんど使用されておらず、2つのコンパイラを区別するためにのみ使用されています。
コンパイルはそれよりもはるかに複雑であり(同じ/より高い/より低い言語、バージョンなど)、その単語はもはや役に立たないように思われるため、おそらく概念として消えてしまうでしょう(「トランスパイラー」は今や至る所にあります)
例:TypeScript(タイプセーフチェックを備えたJavaScriptのMicrosoftスーパーセット)は、さまざまなタイプのブラウザーで実行できるJavaScriptコードに変換されます。
https://en.wikipedia.org/wiki/Microsoft_TypeScript "Microsoft TypeScriptは、Microsoftによって開発および保守されているオープンソースのプログラミング言語です。これは、JavaScriptの厳密な構文スーパーセットであり、オプションの静的型付けを言語に追加します。
TypeScriptは、大規模なアプリケーションの開発用に設計されており、JavaScriptにトランスコンパイルします。[5] TypeScriptはJavaScriptのスーパーセットであるため、既存のJavaScriptプログラムも有効なTypeScriptプログラムです。TypeScriptを使用して、クライアント側とサーバー側(Node.js)の両方で実行するJavaScriptアプリケーションを開発できます。」