up:: Rust
クレートはRustスクリプトの塊。
クレートルートはクレートのルートモジュールを作るソースファイル。
バイナリクレートはexeなどの実行ファイルを作るために必要なクレート。ライブラリクレートはdllなどライブラリを作るために必要なクレート。
パッケージはある機能群を提供する1つ以上のクレート。cargo new name
とした場合、nameパッケージを作成したということになる。また、cargo new name --lib
とするとライブラリパッケージを作成できる。
パッケージを構成するライブラリクレートは0個か1個まで。これはライブラリの責任を明確にするための規約。言い換えるなら、lib.rs
はあっても無くてもいい。バイナリクレートはいくらでもOK。
ライブラリクレートに公開されている関数だけが、ビルドされたdllから触れる。
パッケージに付きライブラリクレートは1個までだが、逆に言えばそれぞれパッケージを分ければライブラリクレートはいくつでも使える。パッケージの追加はcargo.tomlの[lib]
セクションに書く。ビルド時間の長期化や独立化による共通処理の使用可否には注意。
というかライブラリクレートからuse
でバイナリクレート読めば実質いくらでも増やせるので……
慣習により、main.rsはパッケージと同じ名前を持つバイナリクレートのクレートルート。
lib.rsはパッケージと同じ名前のライブラリクレートのクレートルート。
exeを作るときはライブラリクレートに何が書いてあっても関係ない。そのライブラリクレートの関数などをバイナリクレート内で触ってない限りは。
パッケージとクレート - The Rust Programming Language 日本語版
以下、bing
ライブラリクレートは複数のクレートに分割できるようですが、パッケージについてライブラリクレートは一つ迄という制約があったと記憶しています。この点について詳しく説明してください。
送信済みメッセージ. ライブラリクレートは複数のクレートに分割できるようですが、パッケージについてライブラリクレートは一つ迄という制約があったと記憶しています。この点について詳しく説明してください。
ご指摘の通り、1つのパッケージには、1つのライブラリクレートしか含めることができません。ただし、複数のパッケージを作成することで、複数のライブラリクレートを定義することができます。
Rustでは、パッケージは、クレートの集合体です。1つのパッケージには、複数のクレートが含まれることがありますが、そのうちの1つだけがライブラリクレートとして定義されます。ライブラリクレートは、Cargo.toml
ファイル内の[lib]
セクションで定義されます。
例えば、以下のようなCargo.toml
ファイルがある場合、
[package]
name = "my_project"
version = "0.1.0"
edition = "2018"
[lib]
name = "my_library"
path = "src/lib.rs"
[[bin]]
name = "my_binary"
path = "src/main.rs"
このファイルは、my_project
という名前のパッケージを定義しています。このパッケージには、my_library
という名前のライブラリクレートと、my_binary
という名前のバイナリクレートが含まれています。
複数のライブラリクレートを定義する場合は、それぞれ別々のパッケージを作成する必要があります。各パッケージには、独自のCargo.toml
ファイルとソースコードが含まれます。
パッケージを分けることによる不都合はありますか?
送信済みメッセージ. パッケージを分けることによる不都合はありますか?
パッケージを分割することによる不都合は、プロジェクトの構造と目的に応じて異なります。一般的には、以下のような問題が発生する可能性があります。
- プロジェクトの管理が複雑になる: パッケージを分割すると、プロジェクトの構造が複雑になり、管理が難しくなる可能性があります。各パッケージは独立して管理されるため、バージョン管理や依存関係の管理が複雑になることがあります。
- コードの再利用性が低下する: パッケージを分割すると、コードの再利用性が低下する可能性があります。各パッケージは独立しているため、共通の機能を定義することが難しくなることがあります。
- ビルド時間が増加する: パッケージを分割すると、ビルド時間が増加する可能性があります。各パッケージは独立してビルドされるため、ビルドプロセス全体が遅くなることがあります。
ただし、これらの問題は、適切なプロジェクト管理と設計によって軽減することができます。パッケージを分割する際は、プロジェクトの目的と構造を考慮して、適切な方法を選択することが重要です。