Индустрия

Rust 1.83 улучшает работу с контекстным кодом Const

Rust 1.83 улучшает работу с контекстным кодом Const

В этом выпуске расширены возможности кода, выполняющегося в контексте const. Это охватывает значительный объем кода, поскольку относится ко всему коду, который компилятор должен оценить во время компиляции: начальное значение const и статических элементов, длина массивов, значения дискриминантов перечислений, общие аргументы const и функции, вызываемые из таких контекстов (const fn).

Улучшения начинаются со снятия ограничения на ссылки на статические элементы. До сих пор контекстам const, за исключением выражения инициализатора статического элемента, было запрещено ссылаться на статические элементы. Теперь это ограничение снято.

Вы по-прежнему не можете читать значение mutable или interior mutable static в контекстах const, также как и конечное значение константы не может ссылаться на mutable или interior mutable статику. Однако теперь вы можете использовать мутабельные ссылки в контекстах const. Ограничения были сохранены для того, чтобы константы оставались «постоянными»: значение, в которое они оцениваются, и их смысл как паттерна (который может включать разыменование ссылок) будут одинаковыми на протяжении всего выполнения программы.

При этом константа может оцениваться как необработанный указатель, указывающий на мутабельную или внутреннюю мутабельную статику.

Наряду с улучшением const-контекстов, этот выпуск также содержит новые функции, которые теперь стабильны в const-контекстах, и длинный список стабилизированных API. По словам команды Rust, эти изменения:

«разблокируют целую новую категорию кода для выполнения внутри const контекстов, и нам не терпится увидеть, как экосистема Rust будет использовать это!».

Версия 1.83 Rust доступна уже сейчас.

Читайте также