Ленивые константы вышли из экспериментального состояния
24.12.2025Типы отложенного вычисления значения получили стабильный статус. Это константы, которые вычисляются при первом обращении, а не при загрузке программы.
Какая была проблема
Задача «вычислить один раз, при первом обращении, из нескольких потоков» на уровне константы решалась только через небезопасный код. Стандартный блокировщик с отложенным значением не был константой, поэтому объявить такую переменную как константу нельзя было.
Обходные пути — изменяемая статическая переменная с ручной блокировкой и без неё в одном — нарушают правила Rust и опасны именно тем, что компилятор на них не смотрит. Ошибка в таком коде проявляется редко и выглядит как повреждение данных из ниоткуда.
Два варианта, чему различаться
Один тип использует блокировку — он подходит, когда значение нужно читать из разных потоков. Второй работает без неё, но тогда обращение возможно только из одного потока, а сам тип нельзя передать в другой.
Различие важно для выбора: в коде, который разделяет значение между потоками, первый тип обязателен, а второй даст ошибку сборки. Обратное — типичная ошибка новичков, и теперь она обнаруживается компилятором.
Зачем это нужно
Ленивые константы применяются для конфигураций, регулярных выражений и больших таблиц, которые не должны вычисляться при загрузке программы, если она их не использует. Это обычный приём в долгоживущих службах: программа запускается и ждёт запросов, а тяжёлые таблицы нужны только при первом обращении.
Оригинал
stabilize lazy_get
Упоминаний: 1 · Просмотров: 2