DEREFERENCE_POINTER_THERE Telegram 9949
#prog #rust #rustreleasenotes

Вышла версия Rust 1.89.0! Как всегда, тут только избранные части, остальное — в детальных заметках о релизе.

▪️Стабилизировали вывод const generics в выражениях!

pub fn all_false<const LEN: usize>() -> [bool; LEN] {
[false; _]
}


К сожалению, использовать _ для const generics в сигнатурах всё ещё нельзя.

▪️Док-тесты теперь запускаются при кросс-компиляции.

▪️Атрибуты вида #![doc(test(attr(..)))] (которые добавляют #[attr(..)] ко всем док-тестам в модуле) теперь можно использовать везде, включая корень крейта.

▪️После фиксов для согласования с существующими компиляторами C/C++ теперь можно использовать i128 и u128 в extern "C" определениях, интероп корректно работает и, как следствие, improper_ctypes_definitions более не триггерится.

▪️Как я уже писал, продление времени жизни временных значений теперь работает и с кортежными конструкторами (кортежных структур и кортежных вариантов enum-ов).

▪️Стабилизированы интринсики (и связанные с ними target feature [1], [2]) из наборов инструкций AVX512, SHA512, SM3 и SM4 для x86-64.

▪️Макро-фрагмент в декларативных макросах без указанного типа теперь является ошибкой компиляции на всех edition.

▪️Результат вычисления format_args! теперь можно сохранять в переменных! 🎉

▪️std::array::IntoIter теперь реализовывает Default. Значение по умолчанию при этом является итератором, который ничего не возвращает. Полезно, когда нужно предоставить итерацию по опциональному массиву и при этом не хочется прокидывать Option в возвращаемое значение.

▪️LazyCell и LazyLock теперь реализуют DerefMut. Одной причиной использовать once_cell меньше.

▪️К слову о локах, для File теперь есть пачка методов ({, try_}lock{, _shared} и unlock) для работы с платформо-специфичными способами блокировки файлов. Напоминаю, что на Linux эти функции требуют кооперации: коду нужно явно указывать на то, что он обращает внимание на блокировки, а по умолчанию они ничего для сторонних процессов не делают.

▪️NonNull можно безопасно создать из ссылки, поскольку ссылки в Rust обязаны не быть null. Для этого есть реализация From<&T> for NonNull<T>. К сожалению, этот способ конвертации не очень очевиден, и на практике многие писали код с NonNull::new_unchecked, в котором ссылка приводилась к сырому указателю по месту вызова. Видимо, чтобы сделать безопасный способ конвертации более видимым и очевидным в исходниках, к NonNull добавили конструктор from_reffrom_mut для конвертации из &mut T). Также этому типу добавили методы для работы с provenance (expose_provenance, with_exposed_provenance, without_provenance), которые аналогичны таковым для сырых указателей, но принимают/возвращают NonZero<usize> вместо usize.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥32



tgoop.com/dereference_pointer_there/9949
Create:
Last Update:

#prog #rust #rustreleasenotes

Вышла версия Rust 1.89.0! Как всегда, тут только избранные части, остальное — в детальных заметках о релизе.

▪️Стабилизировали вывод const generics в выражениях!

pub fn all_false<const LEN: usize>() -> [bool; LEN] {
[false; _]
}


К сожалению, использовать _ для const generics в сигнатурах всё ещё нельзя.

▪️Док-тесты теперь запускаются при кросс-компиляции.

▪️Атрибуты вида #![doc(test(attr(..)))] (которые добавляют #[attr(..)] ко всем док-тестам в модуле) теперь можно использовать везде, включая корень крейта.

▪️После фиксов для согласования с существующими компиляторами C/C++ теперь можно использовать i128 и u128 в extern "C" определениях, интероп корректно работает и, как следствие, improper_ctypes_definitions более не триггерится.

▪️Как я уже писал, продление времени жизни временных значений теперь работает и с кортежными конструкторами (кортежных структур и кортежных вариантов enum-ов).

▪️Стабилизированы интринсики (и связанные с ними target feature [1], [2]) из наборов инструкций AVX512, SHA512, SM3 и SM4 для x86-64.

▪️Макро-фрагмент в декларативных макросах без указанного типа теперь является ошибкой компиляции на всех edition.

▪️Результат вычисления format_args! теперь можно сохранять в переменных! 🎉

▪️std::array::IntoIter теперь реализовывает Default. Значение по умолчанию при этом является итератором, который ничего не возвращает. Полезно, когда нужно предоставить итерацию по опциональному массиву и при этом не хочется прокидывать Option в возвращаемое значение.

▪️LazyCell и LazyLock теперь реализуют DerefMut. Одной причиной использовать once_cell меньше.

▪️К слову о локах, для File теперь есть пачка методов ({, try_}lock{, _shared} и unlock) для работы с платформо-специфичными способами блокировки файлов. Напоминаю, что на Linux эти функции требуют кооперации: коду нужно явно указывать на то, что он обращает внимание на блокировки, а по умолчанию они ничего для сторонних процессов не делают.

▪️NonNull можно безопасно создать из ссылки, поскольку ссылки в Rust обязаны не быть null. Для этого есть реализация From<&T> for NonNull<T>. К сожалению, этот способ конвертации не очень очевиден, и на практике многие писали код с NonNull::new_unchecked, в котором ссылка приводилась к сырому указателю по месту вызова. Видимо, чтобы сделать безопасный способ конвертации более видимым и очевидным в исходниках, к NonNull добавили конструктор from_reffrom_mut для конвертации из &mut T). Также этому типу добавили методы для работы с provenance (expose_provenance, with_exposed_provenance, without_provenance), которые аналогичны таковым для сырых указателей, но принимают/возвращают NonZero<usize> вместо usize.

BY Блог*


Share with your friend now:
tgoop.com/dereference_pointer_there/9949

View MORE
Open in Telegram


Telegram News

Date: |

Healing through screaming therapy How to create a business channel on Telegram? (Tutorial) With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. On June 7, Perekopsky met with Brazilian President Jair Bolsonaro, an avid user of the platform. According to the firm's VP, the main subject of the meeting was "freedom of expression." Write your hashtags in the language of your target audience.
from us


Telegram Блог*
FROM American