Инварианты.
Ну это внутри имплементации, len же ни разу не pub.
Потому что если длинна будет больше, чем на самом деле есть элементов — можно будет прочитать не инициализированную память. А если больше чем capacity то ещё хуже
1) мы обсуждали теорию на счёт того, что его можно было бы сделать pub 2) из-за этого получается что unsafe распространяется по всему модулю совсем не заметно
Да, теперь понял. Но это больше похоже на контракт который сложно описать правильно
Неописуемые контракты это и есть unsafe
Не совсем, есть семантическая разница между unsafe и unsound
а разве из моих слов следует обратное?
Не особенно сложно. Просто в контрактах обычно используются ghost-переменные и -структуры данных.
Это я помню, PhantomData
Нет, это другое. 🙂
Нет, unsound и unsafe — разные вещи. Unsafe часто и внутри модуля используется, даже если функция не публична, но имеет инварианты.
Обсуждают сегодня