web-dev-qa-db-ja.com

Rustはマシンコードにどのようにコンパイルされますか?

私は最近 Rustプログラミング言語 を見てきました。どのように機能しますか? RustコードはELFまたはPE(など)バイナリにコンパイルされているようですが、それがどのように行われるかについての情報を見つけることができませんでしたか?中間形式にコンパイルされてからコンパイルされましたか?たとえば、gxxの残りの部分はありますか?ヘルプ(またはリンク)は本当にありがたいです。

25
Dllewellyn

Rustコンパイラのコード生成フェーズは主にLLVMによって実行です。LLVMはコンパイラを構築するためのツールのセットであり、特にC [+ +]コンパイラclang[++]

まず、Rustコンパイラ(たとえば、clangのように)は、すべてのRustタイプや借用のチェックなどの特定のことを行います。最後に、LLVM-IRを生成します。IRは中間表現を表し、アセンブリに匹敵しますが、非常に高いレベルであり、最も重要なのはプラットフォームに依存しません。次に、 Rustコンパイラは☏LLVMを呼び出して次のように言います:

バディ、このIRを受け取って、現在のプラットフォームのマシンコードを生成してくれませんか。それは素晴らしいでしょうwould◡◕

どのLLVMが応答するか:

????はい、問題ありません。新しい友達です。以下は、[例] x86_64!用に高度に最適化されたマシンコードです。 ♫♪♫

その後、数人の友人を招待して、すべてを素敵な小さな[例] ELFパッケージにまとめ、ユーザーのファイルシステムに美しく配置します。 (そしてユーザーは...のようです)


このような情報は 公式FAQ にあり、とにかく興味深い情報がたくさん含まれています。 Rustコンパイラの詳細については、 「Rustcガイド」 を参照してください。この質問については、章 "High Level Overview " はかなり興味深いです。

70