ネタ元: performance - What is the overhead of Rust's Option type? - Stack Overflow
Rustにはnull値がなく、代わりにOptionを使う。このOptionは、ポインタ型に対しては最適化されるそうだ。
確認してみる。(rustc 0.10を使った。)
use std::mem::size_of;
#[deriving(Eq, Clone)]
enum Maybe<T> {
Nothing,
Just(T),
}
fn main() {
println!("size of int : {}", size_of::<int>());
println!("size of ~int : {}", size_of::<~int>());
println!("size of Option<int> : {}", size_of::<Option<int>>());
println!("size of Option<~int>: {}", size_of::<Option<~int>>());
println!("size of Maybe<int> : {}", size_of::<Maybe<int>>());
println!("size of Maybe<~int> : {}", size_of::<Maybe<~int>>());
}実行結果:
size of int : 8 size of ~int : 8 size of Option<int> : 16 size of Option<~int>: 8 size of Maybe<int> : 16 size of Maybe<~int> : 8
Option<int>と異なり、Option<~int>のサイズは~intと変わらないことがわかる。また、この最適化は別に定義されたMaybeに対しても働いているようだ。