it-swarm-ja.com

Rustに外部リンカーが必要なのはなぜですか?他の同様の言語はありますか?

Rustは、最終的な出力を生成するために外部リンカー(GCCなど)を必要とします。バンドルされていないのはなぜですか?同様のことをする言語はありますか?

2
Frederick Zhang

Rustでは、最終出力を生成するためにリンカーが必要です。オブジェクトファイルを生成するコンパイラとは別のプログラムである限り、これは「外部」にすぎません。

同じことがほとんどのCおよびC++コンパイラーにも当てはまり、おそらくSwift、Ada、Fortranなどの他のコンパイル済み言語の束もそうです。

独自のリンカをバンドルする代わりにシステムリンカを使用すると、互換性を確保するのに役立ちます。確かに、RustはLLDをバンドルできますが、Linuxでシステムリンカーを使用したり、WindowsでMinGW(とにかく必要)をバンドルしてLD内部?(または、MSVC ABIを使用する場合は、とにかくVisual Studioをインストールする必要があるため、link.exeを使用できます。)

また、リンカーの呼び出しは複雑で、プラットフォーム固有の黒魔術に満ちている傾向があるため、リンカーの呼び出しを外部コンパイラドライバーに依存すると、rustcコンパイラが簡素化されます。このロジックを再実装するのは時間の無駄です。

10
Sebastian Redl