2020年12月26日から2020年12月31日 のRustの勉強記録

TRPL pp. 324-347

13.5

ループとイテレータをパフォーマンスの比較をする

イテレータは、

13.6

低レベルのパフォーマンスで、高レベルの考えを明確に表現するというRustの能力に貢献

14

Cargoの色々な機能

14.1

リリースプロファイルでビルドをカスタマイズする。

Cargo.tomlファイルに[profile.*]セクションを追加することでデフォルト設定の一部を上書きする

e.g., opt-levelは最適化の度合いで0(dev)から3(release)まで

14.2

Crates.ioにクレートを公開する

14.2.1

ドキュメンテーションコメント

14.2.1.1

よく使われるセクション

14.2.1.2

ドキュメンテーションコメントにコードブロックを追加すると、cargo testでドキュメントのコード例をテストとして実行する。 動かない例がついているよりも悪いものはない。

14.2.2

これらは開発する自分にとって意味ある構造であり、使用者よりも開発者に関係すること

ユーザーにとってはそうではない。 使用者にとって役立つ構造を含んでいないし、use文で指定するのは不便。

再構築する必要なしに、要素を再エクスポートし、自分の非公開構造とは異なる公開構造にできる。 もちろん内部構造を見て使用することもできる。 これはクレートの使用経験に大きな違いを生む。

14.2.3

クレートを公開するためにやること

14.2.4

14.2.5, 14.2.6

crates.ioに公開したら永久にアーカイブされる。決して削除されない。

crates.ioの1つの主な目標が、crates.ioのクレートに依存している全てのプロジェクトのビルドが動き続けるようにすること

yank(取り下げ)はできる。それのundoもできる。取り下げると新規のプロジェクトは新たに依存できない。既存のは使い続けられる。

14.3

ライブラリクレートが肥大化したら、服須のライブラリクレートに分割したくなる。

ワークスペース:

やり方:

  1. ワークスペース用の新しいディレクトリを追加する。
  2. ワークスペース全体を設定するCargo.tomlファイルを作成する
    1. [workspace]セクションから開始
    2. members = ["xxx", ...]
  3. そのディレクトリ内でcargo newを実行し、クレートを追加する
  4. cargo buildを走らせるとワークスペースを構築できる

14.3.2

メンバクレートの追加とその使用

メンバクレートのパス依存を追加する方法

[dependencies]
yy = {path = "../yy"}

14.3.2.1

それぞれのクレートのCargo.tomlファイルに外部クレートを追加する

buildすると最上位のCargo.lockに、それに対する依存の情報を含むようになる

最上位のCargo.lockにその外部クレートが存在しても それぞれのクレートのCargo.tomlファイルにもそれが存在しない限り、その外部クレートを使用することはできない。 これで、明示的に依存していることを示す。

14.3.2.2

個別のクレートにテストを追加する

ワークスペースの最上位のディレクトリで、

ワークスペースのクレートの公開は個別にそれぞれの各クレートを公開しなければならない

ワークスペースの利用の利点:

14.4

cargo installで、crates.ioから

14.5

$PATHにあるバイナリが、 cargo-somethingという名前なら、 cargo somethingとサブコマンドであるかのように実行できるように拡張することができる

cargo installと拡張しやすさ、これら2つの組み合わせはCargoの設計上の非常に便利な恩恵