Вышел Rust 1.89.0 с поддержкой extern "interrupt" и декларативных derive-макросов

07.08.2025

Опубликован Rust 1.89.0. В релизе появилась поддержка функций-обработчиков прерываний extern "interrupt" fn() -> !, полная поддержка фрагментов указателей в const-eval и работающие без proc-macro декларативные derive-макросы.

Обработчики прерываний на уровне языка

Тип возврата ! у функции с extern "interrupt" означает, что она никогда не возвращается обычным образом. Это типобезопасный способ выразить обработчик прерывания: компилятор проверяет, что внутри функции нет путей, возвращающих значение, поэтому нельзя случайно забыть core::intrinsics::unreachable() в конце.

Фрагменты указателей в const-eval

Const-вычисления теперь полностью поддерживают «fragment pointers» — узкие ссылки на часть значения (например, ссылку на одно поле структуры). Это закрывает давнее ограничение и позволяет считать больше константных выражений на этапе компиляции.

Декларативные derive-макросы

Реализованы декларативные derive-макросы, описанные в RFC 3698. Их суть — перенести логику раскрытия макросов из процедурных макросов на уровень macro_rules!. Практический эффект тот же, что у обычных декларативных макросов: отладка становится куда понятнее, а сгенерированный код не зависит от proc-macro2 и его зависимостей. Побочный эффект — не нужно оформлять отдельным крейтом.

Прочее

  • Реализован #[derive(From)]
  • Улучшена диагностика хвостовых вызовов: теперь показывается информация о временах жизни
  • Стабилизированы duration_constructors_lite, panic_payload_as_str, strict_overflow_ops, unsigned_signed_diff, const TypeId::of и inline asm для loongarch32
  • Реализованы continue_ok и break_ok для ControlFlow
  • В сообщение паники добавлен идентификатор потока

Оригинал

Announcing Rust 1.89.0

Упоминаний: 1 · Просмотров: 4