Telegram Web Link
Провёл второй ваншот в жизни
🎉13🤮2💩2🤡1
😁20🔥32
#meme про собеседования
😁11🌚3
#prog #rust #rustreleasenotes

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

Если бы этот релиз можно было описать одним словом, то это было бы слово "полировка": релиз скорее про улучшение уже существующих фич и стабилизацию старых, давно бывших в nightly, чем про добавление чего-то действительно нового.

▪️Компилятор теперь не даёт компилировать код с суффиксами на индексах для кортежей и кортежных структур. Это было разрешено ранее по недосмотру.

▪️Добавили предупреждение на создание повисших указателей на локальные переменные. Сама по себе эта операция не является небезопасной, но на таком указателе определено очень мало осмысленных операций. Пример (из PR):

fn f() -> *const u8 {
let x = 0;
&x // returns a dangling ptr to `x`
}

⬇️

warning: a dangling pointer will be produced because the local variable x will be dropped
--> src/lib.rs:3:5
|
1 | fn f() -> *const u8 {
| --------- return type of the function is *const u8
2 | let x = 0;
| - x is part the function and will be dropped at the end of the function
3 | &x // returns a dangling ptr to x
| ^^
|
= note: pointers do not have a lifetime; after returning, the u8 will be deallocated at the end of the function because nothing is referencing it as far as the type system is concerned
= note: #[warn(dangling_pointers_from_locals)] on by default

Анализ достаточно умный, чтобы понимать поток управления и цепочки кастов (примеры в тестах в PR).

▪️Компилятор теперь не выдаёт предупреждение о мёртвом коде на as-касты из выражений типа never. Да, это действительно мёртвый код, но в некоторых ситуациях подобные касты были нужны (главным образом для todo!() в функциях, возвращающих impl Trait).

▪️Уровень поддержки для Windows с нативным ABI на ARM (aarch64-pc-windows-msvc) подняли до Tier 1.

▪️Парочка дополнений насчёт потоков: попытка установки минимального размера стека теперь возвращает ошибку при невозможности это сделать вместо паники. Сообщение о панике теперь включает в себя ID потока, в котором её начали.

▪️Задокументировали разумное предположение о Clone и PartialEq/Eq, на которое опирается стандартная библиотека (главным образом коллекции): копия значения, полученная путём вызова .clone(), должна быть равна исходному значению (при условии, что исходное значение равно самому себе).

▪️Ещё одно дополнение к документации (и соответствующий фикс): функции {min, max, minmax}_by из std::cmp передают сравниваемые значения в функцию-компаратор в том же порядке, в котором они передаются в саму функцию.

▪️Стабилизировали громадное количество функций:
🔸 Path::file_prefix для извлечения порции имени файла до расширения. В отличие от существующей Path::file_stem, отрезает все расширения, а не только последнее:

assert_eq!("foo", Path::new("foo.tar.gz").file_prefix().unwrap());
assert_eq!("foo.tar", Path::new("foo.tar.gz").file_stem().unwrap());


🔸Несколько методов для модификации AtomicPtr.
🔸strict_*-методы на примитивных числах, которые паникуют при переполнении вне зависимости от профиля компиляции, включая методы для операций с различной знаковостью.
🔸uN::checked_signed_diff для вычисления знаковой разницы беззнаковых чисел.
🔸array::repeat (в отличие от встроенного синтаксиса, работает не только с Copy-типами).
🔸Duration::from_mins и Duration::from_hours.
🔸BTreeMap::extract_if и BTreeSet::extract_if для ленивого вытаскивания из коллекций значений, удовлетворяющих предикату.
🔸str::ceil_char_boundary и str::floor_char_boundary.

▪️const TypeId::of 🎉🎉🎉

▪️У cargo теперь есть настройка для указывания того, куда складывать промежуточные артефакты компиляции.

▪️Для ключа --target в cargo теперь можно указывать значение host-tuple, которое будет заменено на target tuple для платформы, на которой проходит компиляция.
👍54🎉3
Forwarded from Neural Machine
Искусство ловли кошки похоже на борьбу с огнем.
3
😁31🤯71🔥1
Блог*
💅
💅
😍32🤩1
😍18🤮3💩3🤡3👎1👏1👌1
Блог*
❤️
😁7❤‍🔥2👎1🥰1🤮1
2025/11/03 08:21:22
Back to Top
HTML Embed Code: