私はこの言葉を聞き続け、すべてのグーグル検索はコンパイラに関する記事に私を導きます。コンパイルターゲットという用語の意味を理解したいだけです:|
更新:コンテキストを与えるために:Webアセンブリは、C、C ++、Rustなどの他の言語のコンパイルターゲットであると言われました。
私はこの言葉を聞き続け、すべてのグーグル検索はコンパイラに関する記事に私を導きます。コンパイルターゲットという用語の意味を理解したいだけです:|
更新:コンテキストを与えるために:Webアセンブリは、C、C ++、Rustなどの他の言語のコンパイルターゲットであると言われました。
回答:
コンパイラは、本質的に、ある言語で入力を受け取り、別の言語で出力を生成する翻訳者です。たとえば、Eiffel SoftwareのコンパイラはEiffel言語の入力を受け取り、Cを生成します。IntelのGCCはC言語の入力を読み取り、x86アセンブリを生成します。Intel用のGASアセンブラーは、x86アセンブリーを受け取り、x86オブジェクトコードを生成します。これらの3つはすべて技術的にはコンパイラです。
形式に関係なく、コンパイラーによって読み取られる入力はソースと呼ばれ、出力はターゲットと呼ばれます。後者の用語は、その定義の1つである「意図した結果」から取られています。
コンパイラの大部分は、特定のプロセッサまたはアーキテクチャのアセンブリコードまたはオブジェクトコードを生成するように設計されています。そのため、ターゲットは出力形式ではなくアーキテクチャ自体を参照するためによく使用されます。
コンパイラのターゲットは、実行するアーキテクチャと同じである必要はありません。また、それが発生する場合、プログラムはクロスコンパイラと呼ばれます。(たとえば、GCCをビルドしてx86システムで実行し、CをARMアセンブリにコンパイルできます。)
さらに、コマンドラインのスイッチなどの入力に応じて、異なるターゲットの出力を生成できる単一のコンパイラがあります。これらはマルチターゲットコンパイラと呼ばれます。
翻訳では、言語が英語のような自然言語であろうと、Cのような人工言語であろうと、用語ソースとターゲットを使用して、翻訳システムの入力と出力について話します。自然言語翻訳では、システムは2つの言語間で翻訳できる有能な人間の脳です。プログラミング言語では、コンパイラーです。
したがって、コンパイラのソースはプログラミング言語(C)であり、ターゲットはバイトコード(マシンレベルの命令)です。異なるシステム(CPUアーキテクチャ)は異なる命令セット(ARM、MIPSなど)を持っているため、コンパイルでターゲットを使用することがよくあります。コンパイラは正しい命令(バイトコード)を作成できるように、どの命令セットがターゲットであるかを知る必要があります。
WebAssembyは最新かつ最高のもので、c / c ++コードをバイナリ形式に変換します。
これは、アプリケーションの1つを見ることができるリンク、マシンコードで単純な階乗プログラムを変換する速度です。
この獣、https://godbolt.org/を確認してください
このサンプルプログラムを使用して、そのサイトで実行し、アセンブリを確認できます。
# include<stdio.h>
int square(int num) {
return num * num;
}
int main() {
int res = square(4);
printf("%d\n",res);
return 0;
}
ホストとターゲットに関する基本情報、プログラミング言語を10101010に翻訳する方法。
host=>pc :(windows, iOS, Linux, zOS, Solaris..etc)
target=>CPUhardware: (Intel x86, ARM, PowerPC, etc)
GCCは、C / C ++コードをアセンブリコードに変換します。「アセンブラ」と呼ばれるツールはアセンブリコードをマシンコードに変換し、「リンカー」と呼ばれるツールは複数のマシンコードファイルを1つの実行可能ファイル(Windowsでは.EXE)ファイルに接続します。これらのコンパイラのほとんどでは、結果のアセンブラコードをファイルに書き込むことができるため、アセンブラコードを確認したり変更したりできます。
アセンブラとリンカはツールチェーンの一部であり、通常、コンパイラとともに提供されます。
ただし、一部のコンパイラ(Microsoftなど)は、C / C ++コードを機械語に直接変換するため、アセンブラーは不要です。これらのコンパイラの多くはアセンブラコードを作成できないため、アセンブラコードをファイルに書き込むことはできません。
ちなみに、.EXEファイルを直接作成するコンパイラー(C / C ++用ではなく、他のプログラミング言語用)もあり、リンカーは不要です。
WebAssembly:https : //github.com/WebAssembly/design