Как Rust хранит типы во время выполнения?
Обычно нет.
Rust не знает, когда выполняется кодкакой тип хранится в определенном месте
Правильно.
не нужно ли знать, какой тип хранится
Нет,байты в памяти должны быть правильными, а остальная часть кода предполагает столько же.Смещения полей в структуре заполняются сгенерированным машинным кодом.
Когда Rust хранит что-то как информация о типе?
При выполнении динамической диспетчеризации, указатель жира используется.Он состоит из указателя на данные и указателя на vtable , набор функций, которые составляют рассматриваемый интерфейс.Vtable может рассматриваться как представление типа, но в нем не так много информации, которая, как вы думаете, входит в «тип» (если черта этого не требует).Динамическая диспетчеризация не очень распространена в Rust, так как большинство людей предпочитают статическую диспетчеризацию, когда это возможно, но оба метода имеют свои преимущества.
Есть также такие понятия, как TypeId
, которые могут представлять однуопределенный тип, но только из подмножества типов.Это также не дает много возможностей, кроме того, «это один тип или нет».
Разве это не ужасно хрупко?
Да, это может бытьЭто одна из вещей, которая делает Rust таким интересным.
В таких языках, как C или C ++, не так уж много защищает программиста от глупых ошибок, которые выходят из-под контроля и путают эти байты, плавающие в памяти,Эти ошибки приводят к ошибкам из-за безопасности памяти.Вместо того, чтобы интерпретировать ваш пароль как пароль, он интерпретируется как ваше имя пользователя и распечатывается для злоумышленника (упс!)но все же все сделано во время компиляции. Небезопасно Rust позволяет использовать эти опасные инструменты в обмен на то, что теперь программист должен поддерживать все гарантии, как если бы они снова писали на C или C ++.
См. Также: