Я хотел бы портировать некоторый код C на Rust, который делает что-то похожее на указатели, допускающие значение NULL, но с положительными целыми числами. Отсутствующие данные в некоторых больших структурах данных представлены отрицательными целочисленными значениями в целом числе со знаком. Для основного значения доступен 31 бит, а то, что по сути является пустым вариантом перечисления, упаковано в бит знака.
В Rust есть оптимизация обнуляемых указателей, позволяющая делать что-то очень похожее с указателями.
Я мог бы сделать порт 1 к 1 и продолжать использовать для этого необработанные целые числа со знаком, но есть ли лучший способ, который не приводит к снижению производительности? Какой-то продвинутый намек на перечисление?
Option<NonZeroU32>
, я думаю, что он был разработан специально для такой ситуации: doc.rust-lang.org/core/num/struct.NonZeroU32.html - person Tarmil   schedule 24.10.2018NonZeroU32
делает что-то другое; добавление биекции (как предполагает ответ Матье) будет работать, но добавляет штраф за производительность. - person trentcl   schedule 24.10.2018Option<>
вместо использованияOption<>
является альтернативой для избежания штрафа за память. Поскольку это помечено как дублированное, см. здесь пример . - person attdona   schedule 24.10.2018