Rust パニックとアサート

プログラムの実行が継続できないような重大な問題をパニックという
パニックは他の言語の例外処理に似ている
Cargo.tomlファイルのpanic=’abort’で異常終了する

let f = File::open("sample.txt");
let f = match f {
	Ok(file) => file,
	Err(error) => {
		panic!("ファイル開けません: {:?}", error)
	}
}

アサートはプログラムの途中で値が妥当であるか調べる
assert_eq!(left, right);

let f = 3.7_f64;

assert_eq!(f.floor(), 3.0);
println!("f={}", f);

### メモリ管理
メモリはランタイムが管理するので考える必要はない

Box: std::boxed::Boxを使うことでヒープにメモリを確保することができる

struct Point {
	x: i32,
	y: i32,
}

impl Clone for Poin {
	fn clone(&self) -> Self {
		Point {
			x: self.x.clone(),
			y: self.y.clone(),
		}
	}
}

fn main() {
	let p1 = Point {x: 12, y:25};
	let p2: Box<Point> = Box::new(Point {x: 23, y: 45});
	println!("{:?}", type_of(p1.clone()));
	println!("{:?}", type_of(p2.clone()));
	println!("{}, {}", p1.x, p1.y);
	println!("{}, {}", p2.x, p2.y);
}

fn type_of<T>(_: T) -> &'static str {
	std::any::type_name::<T>()
}
use std::mem;

struct Point {
	x: i32,
	y: i32,
}

fn main() {
	let p = Point {x: 12, y: 25};
	let a = [1,2,3,4,5,6,7,8,9];

	println!("pのサイズ={}", mem::size_of_val(&p));
	println!("aのサイズ={}", mem::size_of_val(&a));
}