Avatar ·

¿Qué tan grandes son los gastos generales de Option<T> en Rust en comparación con los punteros nulos?

¡Hola a todos! Acabo de empezar a aprender Rust, viniendo de C++. Allí estaba acostumbrado a usar nullptr o NULL para indicar la ausencia de un valor. En Rust, en su lugar se usa Option, y me pregunto: ¿qué tan costoso es esto? En C++, un puntero nulo es simplemente 0, y no hay gastos adicionales. Por ejemplo, tengo esta estructura: ```rust struct Node { value: i32, left: Option>, right: Option>, } ``` Si hago `left: None`, Rust debe almacenar en algún lugar una bandera que indique que es None. ¿Significa que cada Option ocupa más memoria que un puntero crudo? ¿O el compilador optimiza esto de alguna manera? Intenté verificar el tamaño: ```rust use std::mem::size_of; fn main() { println!("{}", size_of::>>()); // 8? println!("{}", size_of::>()); // 8? } ``` En un sistema de 64 bits, ambos mostraron 8 bytes. Pero ¿cómo es posible? Si Option es un enum, debería almacenar un discriminante (me