Rust とは? 2015 年にリリースされたシステムプログラミング⾔語。 A language empowering everyone to build reliable and efficient software (Rust Official) but especially folks who didn't think systems programming was for them (Ashley Williams) fn main() { let user_name = "Yuki"; println!("Hello, World!: {}", user_name); } 2020-08-22 Zli × サイバーエージェント 合同LT
将来性 Chromium の⼀部コンポーネントへの導⼊が検討されはじめている? Amazon や Microsoft はすでに公式に Rust を使⽤したプロダクトを作ったことを発表し ている。 Linux への導⼊の噂。 Rust Foundation の設⽴を 2020 年中に⾏うことが発表された。 Rust は次の 40 年のための⾔語 Rust: A Language for the Next 40 Years - Carol Nichols https://www.youtube.com/watch?v=A3AdN7U24iU 2020-08-22 Zli × サイバーエージェント 合同LT
所有権 コンパイルエラーは次のように出る。 error[E0382]: borrow of moved value: `text1` --> src/main.rs:4:20 | 2 | let text1 = String::from("Hello, world"); | ----- move occurs because `text1` has type `std::string::String`, which does not implement the `Copy` trait 3 | let text2 = text1; | ----- value moved here 4 | println!("{}", text1); | ^^^^^ value borrowed here after move 2020-08-22 Zli × サイバーエージェント 合同LT
ライフタイム ダングリングポインタの回避のための仕組みで、参照のスコープを解析する。 ライフタイムのおかげでファイルディスクリプタなどの破棄も、任せておける。 { let r; { let x = 5; // r は x への参照をもつが… r = &x; } // x はこのスコープを抜ける瞬間にムーブ。 // スコープ外の参照を使⽤しようとしている→ ライフタイム制約違反 println!("r: {}", r); } 2020-08-22 Zli × サイバーエージェント 合同LT
デフォルトが不変(イミュータブル) 何も指定せず変数を宣⾔(Rust では束縛という)すると不変になる。 可変にするには、明⽰的に書く必要がある。 不変な変数に可変な操作を⾏おうとすると、コンパイルエラーになる。 fn main() { // x は不変な変数として宣⾔される let x = 5; // the value is 5 println!("the value is {}", x); // 不変で束縛した変数に新しい値を代⼊しようとした。 // コンパイルエラーになる。 x = 6; println!("the updated value is {}", x); } 2020-08-22 Zli × サイバーエージェント 合同LT
デフォルトが不変(イミュータブル) 先ほどのコードは、変数が可変な事を⽰す let mut と書くことによって動作させられ る。 fn main() { let mut x = 5; println!("the value is {}", x); x = 6; println!("the updated value is {}", x); } 2020-08-22 Zli × サイバーエージェント 合同LT