Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

小さなクレートを優先する

説明

1 つのことをうまく行う小さなクレートを優先します。

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] に変換するための関数を提供します。(歴史的な例)

関連項目