thread_local! теперь допускает сокращённые времена жизни без const-инициализатора

26.09.2026

В макросе thread_local! разрешено опускать 'static в lifetimes и на всех платформах, а не только при const-инициализаторе. Раньше сокращение работало лишь в этом узком случае.

Как это устроено

Сокращение времён в Rust-функциях работает и для именованных временен, и для 'static во входных позициях. Чтобы распространить это на thread_local!, автор добавил упоминание 'static в аргумент сгенерированной макросом функции инициализации — тогда сокращённое время жизни в типе возврата по умолованию становится 'static.

Для этого используется PhantomData<&'static ()>, который, по словам автора, в релизной сборке должен компилироваться в ничто.

Изменение работает как с const-инициализатором, так и без него, на всех платформах. Автор — zachs18.

Оригинал

Allow elided ('static) lifetimes in thread_local!

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