小さなクレートを好む

説明

一つのことをうまく行う小さなクレートを好みましょう。

CargoとCrates.ioは、サードパーティライブラリの追加を容易にします。これはCやC++などと比べてはるかに簡単です。さらに、crates.io上のパッケージは公開後に編集や削除ができないため、現在動作しているビルドは将来も動作し続けるはずです。このツールの利点を活用し、より小さく、より細分化された依存関係を使用すべきです。

利点

  • 小さなクレートは理解しやすく、よりモジュール化されたコードを促進します。
  • クレートはプロジェクト間でコードを再利用できるようにします。例えば、urlクレートはServoブラウザエンジンの一部として開発されましたが、その後プロジェクト外でも広く使用されるようになりました。
  • Rustのコンパイル単位はクレートであるため、プロジェクトを複数のクレートに分割することで、より多くのコードを並列でビルドできるようになります。

欠点

  • これは「依存関係地獄」につながる可能性があります。プロジェクトが同時に複数の競合するバージョンのクレートに依存する場合です。例えば、urlクレートにはバージョン1.0と0.5の両方があります。url:1.0Urlurl:0.5Urlは異なる型であるため、url:0.5を使用するHTTPクライアントは、url:1.0を使用するWebスクレイパーからのUrl値を受け入れません。
  • crates.io上のパッケージはキュレーションされていません。クレートは不適切に書かれている可能性があり、役に立たないドキュメントを持っている可能性があり、または明らかに悪意のある可能性があります。
  • コンパイラはデフォルトでリンク時最適化(LTO)を実行しないため、2つの小さなクレートは1つの大きなクレートよりも最適化されない可能性があります。

urlクレートは、URLを扱うためのツールを提供します。

num_cpusクレートは、マシン上のCPU数を照会する関数を提供します。

ref_sliceクレートは、&T&[T]に変換するための関数を提供します。(歴史的な例)

関連項目