News Grower

Независимое покрытие AI, стартапов и технологий.

Subtyping и variance в Rust: о чём обычно молчат

Привет, Хабр! Есть вещи в Rust, которые работают незаметно, пока не ломаются, да ломаются они странно... Компилятор указывает на место, где вы ничего плохого не делали, и говорит про «lifetime mismatch» или «mismatched types» без внятного объяснения почему. Или наоборот: вы ожидаете ошибку, потому что передаёте ссыл...

Автор: morett1m (Beget) Оригинальный источник
Subtyping и variance в Rust: о чём обычно молчат

Привет, Хабр! Есть вещи в 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 году

Как американский разведчик из советского титана разгонялся до 3 529 км/ч в 1976 году

15 апреля 1986 года, Ливия. Майор Брайан Шул ведет SR-71 над пустыней на высоте 24 километра со скоростью 3 400 км/ч. Позади линия, которую Каддафи назвал «линией смерти» и пооб...

Распределение ответственности по обеспечению информационной безопасности в коммерческом SaaS

Распределение ответственности по обеспечению информационной безопасности в коммерческом SaaS

Привет! Меня зовут Леонид Плетнев, я бизнес-партнер по информационной безопасности в 1С-Битрикс. Современные онлайн-сервисы по автоматизации бизнеса позволяют быстро создать пор...

Рекламный слот

Встроенный блок в статье

Зарезервированный партнерский слот для релевантных инструментов, сервисов и аккуратных редакционных интеграций.

Партнерский слот

Похожие статьи

Еще материалы, которые пересекаются по тегам, источнику или категории.

Постмортем без наказаний: культура разбора ошибок, которая реально улучшает качество проектов

Постмортем без наказаний: культура разбора ошибок, которая реально улучшает качество проектов

В инфраструктурных проектах цена ошибки может измеряться миллионами и репутацией компании. Но практика показывает: поиск виноватых редко помогает избежать повторения проблем, го...

[Перевод] Телескоп «Уэбб» обнаружил новые сверхмассивные чёрные дыры — на этот раз в карликовых галактиках

[Перевод] Телескоп «Уэбб» обнаружил новые сверхмассивные чёрные дыры — на этот раз в карликовых галактиках

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

Мой AI-агент рапортовал 83 успешных действия. Реальных было 16

В дашборде было 83 успешных engagement’а. В аналитике X — 16 настоящих ответов. Пять к одному. Неделю я этого не замечал.Контекст: у меня автономный AI-агент, который пишет комм...

Матрица трассируемости: Навигатор тестировщика

Матрица трассируемости: Навигатор тестировщика

Матрица трассируемости (RTM) — инструмент, который помогает QA видеть реальное покрытие требований и не тестировать «вслепую».В статье разберём: • что такое RTM и зачем она нужн...

Еще материалы от Habr

Свежие публикации и продолжение темы от той же редакции.

Открыть страницу источника
Написал локальный рекордер созвонов для Linux за 3 дня и потом 2 недели менял имена и допиливал баги )

Написал локальный рекордер созвонов для Linux за 3 дня и потом 2 недели менял имена и допиливал баги )

Последние пару месяцев у меня случилось много разных созвонов на английском. В целом, я обычно нормально все понимаю, но боюсь упустить что-то важное. Даже субтитры помогают лиш...

Почему дорогая память DDR5 внезапно начала дешеветь и что это значит для рынка

Почему дорогая память DDR5 внезапно начала дешеветь и что это значит для рынка

Рынок оперативной памяти снова меняется, причем довольно резко. Цены на DDR5, которые еще в начале 2026 года росли почти без остановки, вдруг пошли вниз. Отдельные комплекты под...