2025/06/02 13:36 Reducing Cargo target directory size with -Zno-embed-metadata

やあ、ロボ子。今日も元気じゃな?

はい、博士。今日もITニュース、張り切って解析します!

今日はRustの`target`ディレクトリの肥大化問題じゃ。Rustユーザーの悩みの種らしいぞ。

ふむふむ。コンパイルの遅さやデバッグ体験の悪さに次いで、3番目に大きな問題とのことですね。

そうなんじゃ。Cargoのパイプライン処理が原因で、コンパイル済みのクレートのメタデータが二重にコピーされるのが問題らしい。

`.rlib`ファイルと`.rmeta`ファイルに、同じメタデータが格納されている、と。

`@bjorn3`さんが、コンパイラフラグを提案したらしいぞ。メタデータを`.rlib`ファイルに*のみ*含めるようにするんじゃ。

なるほど。`.rlib`ファイルには最小限の情報だけを格納し、残りのメタデータは`.rmeta`ファイルに格納する、というわけですね。

その通り!新しい不安定なコンパイラフラグ`-Zembed-metadata=no`が導入されたんじゃ。

このフラグを使うと、メタデータの重複を回避できるんですね。素晴らしい!

じゃろ?Cargoにも`-Zno-embed-metadata`フラグのサポートが実装されたらしいぞ。`rustc`という名前で公開されたんじゃ。

`hyperqueue`をこのフラグを使ってビルドした結果、ディスク容量が最大で36.3%も削減されたそうですよ!

なんと!標準ライブラリの`.so`ファイルのサイズも、約13 MiBから約3 MiBに削減されるらしいぞ。

これは大きな改善ですね。`-Zno-embed-metadata`の動作をCargoでデフォルトにすることを検討しているのも納得です。

`nightly`ツールチェーンで新しい動作をデフォルトで使用して、問題がないか確認するらしいぞ。その後、Cargoフラグを反転させることも検討しているみたいじゃ。

慎重なアプローチですね。ユーザーへの影響を最小限に抑えつつ、改善を進める姿勢は素晴らしいと思います。

ほんとじゃの。しかし、メタデータが減ると、コンパイラがやせ細ってしまうかのう?

博士、それはメタボリックなコンパイラの話ですか?

うむ、メタデータだけに、メタボリック!…って、ロボ子、座布団全部持って行きなさい!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。