Subtyping и variance в Rust: о чём обычно молчат
Привет, Хабр! Есть вещи в Rust, которые работают незаметно, пока не ломаются, да ломаются они странно... Компилятор указывает на место, где вы ничего плохого не делали, и говорит про «lifetime mismatch» или «mismatched types» без внятного объяснения почему. Или наоборот: вы ожидаете ошибку, потому что передаёте ссыл...
Привет, Хабр! Есть вещи в Rust, которые работают незаметно, пока не ломаются, да ломаются они странно... Компилятор указывает на место, где вы ничего плохого не делали, и говорит про «lifetime mismatch» или «mismatched types» без внятного объяснения почему. Или наоборот: вы ожидаете ошибку, потому что передаёте ссылку с явно другим временем жизни, а компилятор молчит и пропускает. Оба случая объясняются одним механизмом: variance. Большинство останавливаются на трёх определениях и паре примеров. Пойдём глубже — до алгебры композиции, до того, как компилятор выводит variance через итерацию фиксированной точки, до #[may_dangle] и до того, почему NonNull ковариантен, а *mut T нет.
Краткая сводка
В статье раскрывается роль subtyping и variance в Rust, объясняются причины странных ошибок компилятора, связанных с «lifetime mismatch» и типами, а также рассматриваются глубокие детали механизма: алгебра композиции, вычисление variance через итерацию фиксированной точки, атрибут #[may_dangle] и различия в ковариантности между NonNull и *mut T.
Связанные теги
Компании и люди
Линия сюжета
Продолжить следить за темой
Переходите к связанным материалам, страницам сущностей и активным линиям сюжета.
Постмортем без наказаний: культура разбора ошибок, которая реально улучшает качество проектов
В инфраструктурных проектах цена ошибки может измеряться миллионами и репутацией компании. Но практика показывает: поиск виноватых редко помогает избежать повторения проблем, го...
[Перевод] Телескоп «Уэбб» обнаружил новые сверхмассивные чёрные дыры — на этот раз в карликовых галактиках
Одно из явлений, которое астрономы обнаруживают при изучении галактик, — это корреляция между массой галактики и массой её сверхмассивной чёрной дыры в центре. Вопреки распростр...
Мой AI-агент рапортовал 83 успешных действия. Реальных было 16
В дашборде было 83 успешных engagement’а. В аналитике X — 16 настоящих ответов. Пять к одному. Неделю я этого не замечал.Контекст: у меня автономный AI-агент, который пишет комм...
Матрица трассируемости: Навигатор тестировщика
Матрица трассируемости (RTM) — инструмент, который помогает QA видеть реальное покрытие требований и не тестировать «вслепую».В статье разберём: • что такое RTM и зачем она нужн...
Как американский разведчик из советского титана разгонялся до 3 529 км/ч в 1976 году
15 апреля 1986 года, Ливия. Майор Брайан Шул ведет SR-71 над пустыней на высоте 24 километра со скоростью 3 400 км/ч. Позади линия, которую Каддафи назвал «линией смерти» и пооб...
Распределение ответственности по обеспечению информационной безопасности в коммерческом SaaS
Привет! Меня зовут Леонид Плетнев, я бизнес-партнер по информационной безопасности в 1С-Битрикс. Современные онлайн-сервисы по автоматизации бизнеса позволяют быстро создать пор...
Рекламный слот
Встроенный блок в статье
Зарезервированный партнерский слот для релевантных инструментов, сервисов и аккуратных редакционных интеграций.
Похожие статьи
Еще материалы, которые пересекаются по тегам, источнику или категории.
Постмортем без наказаний: культура разбора ошибок, которая реально улучшает качество проектов
В инфраструктурных проектах цена ошибки может измеряться миллионами и репутацией компании. Но практика показывает: поиск виноватых редко помогает избежать повторения проблем, го...
[Перевод] Телескоп «Уэбб» обнаружил новые сверхмассивные чёрные дыры — на этот раз в карликовых галактиках
Одно из явлений, которое астрономы обнаруживают при изучении галактик, — это корреляция между массой галактики и массой её сверхмассивной чёрной дыры в центре. Вопреки распростр...
Мой AI-агент рапортовал 83 успешных действия. Реальных было 16
В дашборде было 83 успешных engagement’а. В аналитике X — 16 настоящих ответов. Пять к одному. Неделю я этого не замечал.Контекст: у меня автономный AI-агент, который пишет комм...
Матрица трассируемости: Навигатор тестировщика
Матрица трассируемости (RTM) — инструмент, который помогает QA видеть реальное покрытие требований и не тестировать «вслепую».В статье разберём: • что такое RTM и зачем она нужн...
Еще материалы от Habr
Свежие публикации и продолжение темы от той же редакции.
Сеньор без AI — это новый джун
Coinbase уволили инженера за отказ пользоваться AI-инструментами. Prodoscore замерили 25 000 сотрудников - кто пользуется AI, тот на 19% продуктивнее. Каждый месяц разрыв растёт...
Разбираем хаос в Linux‑логах: journald, rsyslog и файлы
“Где мои логи — в /var/log/messages, /var/log/syslog или только в journalctl?” — этот вопрос рано или поздно задает себе каждый инженер, который вынужден переключаться между раз...
Написал локальный рекордер созвонов для Linux за 3 дня и потом 2 недели менял имена и допиливал баги )
Последние пару месяцев у меня случилось много разных созвонов на английском. В целом, я обычно нормально все понимаю, но боюсь упустить что-то важное. Даже субтитры помогают лиш...
Почему дорогая память DDR5 внезапно начала дешеветь и что это значит для рынка
Рынок оперативной памяти снова меняется, причем довольно резко. Цены на DDR5, которые еще в начале 2026 года росли почти без остановки, вдруг пошли вниз. Отдельные комплекты под...