TL;DR

Rust のコンパイラが一度に扱うコードの最小単位。実行ファイルになるバイナリクレートと、他のプロジェクトと共有する機能を定義するライブラリクレートがある。

仕組み

The Rust Programming Language によると、バイナリクレートはコマンドラインのプログラムやサーバのように実行ファイルにコンパイルされるもので、main 関数を持つ。ライブラリクレートは main 関数を持たず、実行ファイルにもならない。コンパイラが読み始めるソースファイルをクレートルートと呼び、これがクレートのルートモジュールになる。

1 つ以上のクレートを束ねたものをパッケージと呼ぶ。パッケージには、クレートのビルド方法を書いた Cargo.toml がある。パッケージはバイナリクレートをいくつでも持てるが、ライブラリクレートは多くても 1 つである。Cargo の規約では、src/main.rs がパッケージと同じ名前のバイナリクレートの、src/lib.rs が同じ名前のライブラリクレートのクレートルートになる。src/bin/ 以下のファイルは、それぞれ別のバイナリクレートになる。

注意点

Rust のプログラマが単に「クレート」と言うときは、たいていライブラリクレートのことで、一般的な「ライブラリ」と同じ意味で使われる。

関連

出典