Rust

Rust で Ruby の拡張を書くことができるらしい

私は Windows 使いなので Windows を使って Rust で Ruby を拡張したい。 最近(といっても半年前)rubygem が Rustで書けるようになったらしいので書いていきたい。 Ruby をインストール rubyinstaller.org ここから +DevKit のインストーラーを使ってイン…

トレイトオブジェクトを返す関数の作成

Boxでくくって、dyn キーワードをつけるのがミソ trait Animal { fn cry(&self); } struct Dog {} impl Animal for Dog { fn cry(&self) { println!("ワン"); } } struct Cat {} impl Animal for Cat { fn cry(&self) { println!("にゃん"); } } fn new_anim…

関数からの戻り値のオーバーヘッドが気になったので調べてみた

モチベ Rust では以下のようなコードはコンパイルでエラーになります。 fn func1() -> &'static String { &String::from("test") } fn main() { println!("{}", func1()); } ↓コンパイル結果 error[E0515]: cannot return reference to temporary value --> …

ベクタ型内の要素をループ内で借用してループの外で使う場合はベクタ変数を借用してループを回そう

今回のソースコード struct A { val: i32, } fn main() { let mut a_list: Vec<A> = vec![]; for i in 1..10 { a_list.push(A { val: i }); } let mut inner_elem = &A { val: 0 }; for a in a_list { match a.val { 3 => inner_elem = &a, _ => {} } } println</a>…

所有権? String と 文字列スライス

文字リテラル Hello から String を作成し、一部を文字列スライスとして切り出した後、String スコープ外で文字列スライスを使う。というシナリオを考えたが、以下のようにコンパイルエラーが発生する。文字列スライスが参照している大元の String がスコー…