-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reading note #2
Comments
初期値を与えない変数Rustにはnull値がないということと初期値を与えないことについて矛盾するように感じるかもしれないが、 |
なぜこれがコンパイルエラーにならないのか?struct Excerpt<'a> {
idx: usize,
part: &'a str,
}
fn main() {
let mut excerpt1 = Excerpt {
idx: 1,
part: "second sentence",
};
{
let str = "changed";
excerpt1.part = str;
}
println!("{:?}", excerpt1);
} https://doc.rust-jp.rs/book-ja/ch10-03-lifetime-syntax.html |
ライフタイム注釈がコンパイラで勝手にふられる場合
引数がselfより短いライフタイムを持つことを許容しない? |
テストのコマンドラインオプションcargo test に対するオプションと、ビルドされたテストバイナリに対するオプションがある。 ヘルプの出力も |
モジュール、クレート、パッケージ、ワークスペースhttps://doc.rust-jp.rs/book-ja/ch07-01-packages-and-crates.html モジュールモジュールは mod {} で囲んで記述できる。 パッケージパッケージは複数のクレートを持てる。 ワークスペースワークスペースはメンバーとなるパッケージを持ち、それを定義するCargo.tomlを持つ。 [workspace]
members = ["foo", "bar", "baz"]
default-members = ["foo"] ワークスペースでは、 -p でパッケージを指定して実行できる。 cargo run -p foo-package クレートの指定でも可能 cargo run --bin foo-binary-crate 何も指定しない場合はデフォルトパッケージが実行される。 cargo run |
バイナリを crate.ioからインストールインストールできるのはバイナリターゲットを持つクレート(main.rsを持つ) |
スマートポインタString、Vec などヒープに確保されて、可変なものは基本的にスマートポインタ。 |
BoxBoxを使う場面コンパイル時にはサイズを知ることができない型があり、正確なサイズを要求する文脈でその型の値を使用する時後述のListのような構造を自前実装する際、Listがどれくらい続くのかわからないのでサイズがわからないときなど 多くのデータがあり、その所有権を移したいが、その際にデータがコピーされないようにしたい時大データの構造体の所有権を移したいが、オーバーヘッドを考えてコピーされないようにしたい時 値を所有する必要があり、特定の型であることではなく、特定のトレイトを実装する型であることのみ気にかけている時特定のトレイトを実装する型であることを望んでいる場合、実装している型によってサイズが異なる(異なる型のstruct とか)ため、サイズを決められない。 コンパイラが型のサイズを決定する
では、Message を確保する際、要素のうち最大のサイズ(i32を3つ分)必要なChangeColorを基準としてMessage型のインスタンスのメモリを確保する。 |
Derefderef 参照 以下の3つの場合に、型やトレイトを見つけた時に参照外し型強制を行う。
3番目のケースでは可変参照を不変参照へ変換している。 |
RC参照カウンタ。シングルスレッドで使用されることを想定している。 |
RefCell
通常はコンパイル時に借用原則が検査されるが、
シングルスレッドで使われる
borrow(), borrow_mut() が返す型borrow() は Ref を返す。 Rc と RefCell を組み合わせて、可変なデータに複数の所有者を持たせるRcは複数の所有者を持たせられるが、不変アクセスしかできない。 |
proc-macro
https://blog.devgenius.io/a-beginners-guide-to-rust-procedural-macros-creating-a-json-derive-macro-eb44279e7244
effective-rust
https://www.lurklurk.org/effective-rust/cover.html
deriveについての記事
https://cohenarthur.github.io/2023/06/05/rust-derives.html
rust for rustcean の感想
https://blog.ymgyt.io/entry/rust-for-rustacieans/
Rustの仕様
https://rust-lang.github.io/rfcs/introduction.html
rust-lang/rfcs#3355
平行処理に関するお話し
https://nnethercote.github.io/2023/07/11/back-end-parallelism-in-the-rust-compiler.html
Rustのパフォーマンスを上げて書く方法
https://jbecker.dev/research/on-writing-performant-rust
The text was updated successfully, but these errors were encountered: