Как заменить целочисленные дискриминанты перечислениями и не проиграть в размере

24.08.2025

Опубликован разбор приёма, который уменьшает размер программы: вместо целого значения, по которому различают варианты, используется отдельный тип на каждый вариант.

Идея

Варианты перечисления обычно хранят целое число — индекс варианта. Оно одинаково для всех вариантов типа, но разное для разных типов: компилятор вынужден использовать более широкий тип во всех случаях. Если же сопоставить варианту отдельный тип с пустой структурой, размер значения становится равным нулю, и на диске и в памяти значения не хранятся вовсе.

Это не только про размер: сопоставление вариантов становится проверкой типов, а не сравнением целых чисел, и ошибиться в нём невозможно.

Оригинал

Rust ints to Rust enums with less instructions

Упоминаний: 1 · Просмотров: 2