Enum — одна из самых популярных фич Rust. Тип enum
может иметь одно из значений в заданном множестве вариантов.
/// Foo имеет значение или 32-битного integer, или символа.
enum Foo {
Int(u32),
Char(char),
}
Значениями типа Foo
могут быть или integer (например, вариант Foo::Int(3)
с полезной нагрузкой 3
), или символы (например, вариант Foo::Char('A')
с полезной нагрузкой 'A'
). struct можно считать AND-комбинациями их полей, а enum
— OR-комбинациями их вариантов.
Этот пост посвящён удивительной оптимизации, выполняемой компилятором Rust с представлением в памяти значений enum
, чтобы они занимали меньше места в памяти (спойлер: это не нишевая оптимизация). В общем случае, уменьшение размера значений может привести к ускорению программ, потому что значения передаются в регистрах CPU и в одну линию кэша CPU умещается больше значений.