小さなクレートを好む
説明
一つのことをうまく行う小さなクレートを好みましょう。
CargoとCrates.ioは、サードパーティライブラリの追加を容易にします。これはCやC++などと比べてはるかに簡単です。さらに、crates.io上のパッケージは公開後に編集や削除ができないため、現在動作しているビルドは将来も動作し続けるはずです。このツールの利点を活用し、より小さく、より細分化された依存関係を使用すべきです。
利点
- 小さなクレートは理解しやすく、よりモジュール化されたコードを促進します。
- クレートはプロジェクト間でコードを再利用できるようにします。例えば、
urlクレートはServoブラウザエンジンの一部として開発されましたが、その後プロジェクト外でも広く使用されるようになりました。 - Rustのコンパイル単位はクレートであるため、プロジェクトを複数のクレートに分割することで、より多くのコードを並列でビルドできるようになります。
欠点
- これは「依存関係地獄」につながる可能性があります。プロジェクトが同時に複数の競合するバージョンのクレートに依存する場合です。例えば、
urlクレートにはバージョン1.0と0.5の両方があります。url:1.0のUrlとurl:0.5のUrlは異なる型であるため、url:0.5を使用するHTTPクライアントは、url:1.0を使用するWebスクレイパーからのUrl値を受け入れません。 - crates.io上のパッケージはキュレーションされていません。クレートは不適切に書かれている可能性があり、役に立たないドキュメントを持っている可能性があり、または明らかに悪意のある可能性があります。
- コンパイラはデフォルトでリンク時最適化(LTO)を実行しないため、2つの小さなクレートは1つの大きなクレートよりも最適化されない可能性があります。
例
urlクレートは、URLを扱うためのツールを提供します。
num_cpusクレートは、マシン上のCPU数を照会する関数を提供します。
ref_sliceクレートは、&Tを&[T]に変換するための関数を提供します。(歴史的な例)