Open11

Rustさわる

ymdarakeymdarake

トレイトオブジェクト:
振る舞いを実装していれば、型はダイナミックでよい
トレイトオブジェクトは、 指定したトレイトを実装するある型のインスタンスを指します。
ただし、実行時に型情報は失われているので オブジェクト安全 であることが必要。

オブジェクト安全:
戻り値の型がSelfでない。
ジェネリックな型引数がない。

ダイナミックディスパッチが行われるため、コンパイラによる最適化は(一部)行われない。
(柔軟な処理の代償)

pub struct Screen {
    pub components: Vec<Box<Draw>>,
}

https://doc.rust-jp.rs/book-ja/ch17-02-trait-objects.html#トレイトオブジェクトで異なる型の値を許容する

ymdarakeymdarake

かしこい
https://doc.rust-jp.rs/book-ja/ch14-03-cargo-workspaces.html#ワークスペースの外部クレートに依存する

ワークスペースには、各クレートのディレクトリそれぞれにCargo.lockが存在するのではなく、 ワークスペースの最上位階層にただ一つのCargo.lockが存在するだけのことに注目してください。 これにより、全クレートが全依存の同じバージョンを使用していることが確認されます。 randクレートをadder/Cargo.tomlとadd-one/Cargo.tomlファイルに追加すると、 Cargoは両者をあるバージョンのrandに解決し、それを一つのCargo.lockに記録します。 ワークスペースの全クレートに同じ依存を使用させるということは、 ワークスペースのクレートが相互に互換性を常に維持するということになります。