Что делает перечисления (enum) в Rust такими мощными?

На примерах попробую показать, почему enum в Rust это несколько больше, чем обычно принято считать. Рассмотрю расширенное использование enum в типовых ситуациях. Сразу забегая вперед скажу, что в рамках статьи я не затрагиваю паттерны и мэтчинг. Первое, что приходит в голову, когда речь заходит об enum , — это идея: «А давайте заменим все константы на enum ». :) Желание логичное, давайте на него посмотрим...

https://habr.com/ru/articles/899792/

#rust #enum #num_enum #перечисления #итераторы #repr #strum #try_from

Что делает перечисления (enum) в Rust такими мощными?

На примерах попробую показать, почему enum в Rust это несколько больше, чем обычно принято считать. Рассмотрю расширенное использование enum в типовых ситуациях. Сразу забегая вперед скажу, что в...

Хабр

[Перевод] Удивительная оптимизация размера enum в компиляторе Rust

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 умещается больше значений.

https://habr.com/ru/articles/899834/

#компиляторные_оптимизации #перечисления #enum #оптимизация_кода #оптимизации

Удивительная оптимизация размера enum в компиляторе Rust

Enum — одна из самых популярных фич Rust. Тип enum может иметь одно из значений в заданном множестве вариантов. /// Foo имеет значение или 32-битного integer, или символа. enum Foo { Int(u32),...

Хабр