私はLLVMコンパイラとインフラストラクチャが初めてです。私は以下の考えを持っています。 Clangは、Rustc for Rustプログラミング言語と同様に、C/C++のLLVMフロントエンドです。両方ともLLVM IRコードを発行でき、発行されたコードは実行可能アプリケーションにコンパイルできます。異なる言語のベースコンパイラとしてのLLVM
私の質問は、別のプログラミング言語をリンクすることですか? IRは、ソースファイルの両方から生成されると、
/* Code in C */
int add(int, int);
int main()
{
printf("%d", add(5 ,6));
}
例
// Code in Rust
fn main()
{
println!("{}", add(5, 6));
}
fn add (x: i32, y: i32) -> i32
{
x + y
}
ためさびで定義された関数は、それらをリンクし、単一のアプリケーションを作成することが可能である - 一例を以下に示しますか?
私はちょうどこれが動作するかどうか知りたいのですが、私に知らせてください。
あなたはどこかで錆ランタイムを持つ必要があると思います...しかし、錆やその逆を呼び出すと問題は異なります。 –
各ソースコードは最初に別々にclangに与えなければなりません。その後、llvm-linkコマンドは複数のビットコードファイルをマージすることができます。 1つのソースコードからの呼び出しが2番目の呼び出しと一致すると、動作する可能性があります。 –
どちらの言語もアプリケーションバイナリインターフェイスと互換性があります。 –