RustにおけるOptionの最適化
ネタ元: 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に対しても働いているようだ。