#prog #rust #rustreleasenotes
Вышла версия Rust 1.95.0! Как всегда, тут только выдержки, всё остальное в детальных заметках о релизе.
▪️
▪️Частично примыкающее изменение: компилятор больше не выдаёт предупреждение на безусловные паттерны в
Эта идиома позволяет привязать значение и что-то сделать/проверить с ним и при этом не пустить имя в окружающую область видимости.
▪️Добавили новый макрос cfg_select!, который позволяет сделать подобие
Технически этот макрос не даёт новых возможностей, но без него нужные атрибуты
▪️Навряд ли кого-то коснётся, но:
▪️Поддержку части платформ подняли до Tier 2 — в основном встраиваемые ARM-платформы от Apple (и их симуляторные версии).
▪️Стабилизированы несколько API, в частности:
🔸Конверсии по ссылке из
🔸Аналогичные конверсии по ссылке между массивами в
🔸Модуль core::range, в котором собираются диапазоны, планируемые на замену текущим. Пока что стабилизированы только RangeInclusive и его итератор. В отличие от текущих диапазонов, новый тип не служит одновременно итератором и потому реализует
🔸Функция core::hint::cold_path для пометки пути исполнения, который не предполагается, что будет часто исполняться. Этакая замена
▪️rustdoc теперь предпочитает стабильные определения нестабильным при сортировке результатов поиска.
Вышла версия Rust 1.95.0! Как всегда, тут только выдержки, всё остальное в детальных заметках о релизе.
▪️
if-гуарды на ветках match теперь могут использовать if let:match value {
Some(x) if let Ok(y) = compute(x) => {
// Both `x` and `y` are available here
println!("{}, {}", x, y);
}
_ => {}
}▪️Частично примыкающее изменение: компилятор больше не выдаёт предупреждение на безусловные паттерны в
if let. Автор изменения мотивирует это распространением кода навроде такого:fn main() {
if let x = funx() && x < usize::MAX {
// use x
}
}Эта идиома позволяет привязать значение и что-то сделать/проверить с ним и при этом не пустить имя в окружающую область видимости.
▪️Добавили новый макрос cfg_select!, который позволяет сделать подобие
match, но для cfg-предикатов:cfg_select! {
unix => {
fn foo() { /* unix specific functionality */ }
}
target_pointer_width = "32" => {
fn foo() { /* non-unix, 32-bit functionality */ }
}
_ => {
fn foo() { /* fallback implementation */ }
}
}
let is_windows_str = cfg_select! {
windows => "windows",
_ => "not windows",
};Технически этот макрос не даёт новых возможностей, но без него нужные атрибуты
#[cfg] нужно выписывать самостоятельно, дублируя дословно все предикаты. Ровно по этой причине стал распространён и используется cfg-if — собственно, объявление в блоге напрямую на него и ссылается.▪️Навряд ли кого-то коснётся, но:
match по enum теперь всегда ведёт себя так, как будто он читает дискриминант. Это кажется странным, но объясняется #[non_exhaustive]. Без этого изменения то, есть ли в некотором unsafe-коде UB или нет, зависело от того, определён ли enum в текущем крейте или в другом. Также match теперь читает дискриминант, даже если только одна ветка населена — без этого изменения поведение различалось в обобщённом коде и в ручной мономорфизации.▪️Поддержку части платформ подняли до Tier 2 — в основном встраиваемые ARM-платформы от Apple (и их симуляторные версии).
▪️Стабилизированы несколько API, в частности:
🔸Конверсии по ссылке из
MaybeUninit-массивов в массивы и слайсы из MaybeUninit, а также конверсии по значению между ними🔸Аналогичные конверсии по ссылке между массивами в
Cell и массивами из Cell🔸Модуль core::range, в котором собираются диапазоны, планируемые на замену текущим. Пока что стабилизированы только RangeInclusive и его итератор. В отличие от текущих диапазонов, новый тип не служит одновременно итератором и потому реализует
Copy (при Copy-индексах, разумеется) и занимает меньше места: ему не нужно хранить состояние для отслеживания поведения на последней итерации, только два индекса.🔸Функция core::hint::cold_path для пометки пути исполнения, который не предполагается, что будет часто исполняться. Этакая замена
likely/unlikely.▪️rustdoc теперь предпочитает стабильные определения нестабильным при сортировке результатов поиска.
🎉9❤2🔥1🥰1
Forwarded from Neural Machine
Я хочу быть максимально удовлетворен своей жизнью. Если окажется херня, я поделюсь, как этого добился.
👍8🥰1
#prog #article
Exceptions in Cranelift and Wasmtime
И немного о том, почему добавить поддержку исключений в уже существующий WASM-рантайм оказалось не самой тривиальной задачей
Exceptions in Cranelift and Wasmtime
И немного о том, почему добавить поддержку исключений в уже существующий WASM-рантайм оказалось не самой тривиальной задачей
👍6🥰1😭1
Раньше: "Если все пойдут с гаражей прыгать, ты тоже пойдёшь?"
Сейчас: "Если все пойдут вайбкодить, ты тоже пойдёшь?"
Сейчас: "Если все пойдут вайбкодить, ты тоже пойдёшь?"
😭12👌3❤2🥰1😁1🤔1
Forwarded from Neural Machine
Я мужчина. Я хочу подождать, пока я стану достаточно взрослым.
❤10😢2🍌2🥰1