Блог*
رفتن به کانال در Telegram
Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here
نمایش بیشتر1 922
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-17 روز
-1130 روز
آرشیو پست ها
1 922
▪️rustdoc теперь предупреждает о возможно пропущенных бектиках в док-комментах. Но линт для этого нужно включать явно. Пример:
#![warn(rustdoc::unescaped_backticks)]
/// `add(a, b) is the same as `add(b, a)`.
pub fn add(a: i32, b: i32) -> i32 { a + b }
Вывод:
warning: unescaped backtick --> src/lib.rs:3:41 | 3 | /// `add(a, b) is the same as `add(b, a)`. | ^ | help: a previous inline code might be longer than expected | 3 | /// `add(a, b)` is the same as `add(b, a)`. | + help: if you meant to use a literal backtick, escape it | 3 | /// `add(a, b) is the same as `add(b, a)\`. | +▪️
cargo new/cargo init внутри воркспейса теперь автоматически подтягивает поля из воркспейса выше.
▪️Гомогенные кортежи и массивы той же длины до 12 элементов включительно теперь можно конвертировать между собой через From/Into.
▪️Очередная пачка API из разряда "стоп, почему такую элементарную вещь стабилизировали только сейчас":
* CStr::is_empty()
* BuildHasher::hash_one
* Пачка методов для обращения знака у NonZero*-типов (во всех вариациях).
▪️read{, _unaligned} на сырых указателях теперь можно использовать в const-контексте — как методы, так и свободные функции в модуле std::ptr. Также в const-контексте теперь можно вызывать split_at (но почему-то всё ещё нельзя split_at_mut :/)1 922
Ну а теперь серьёзно.
#prog #rust #rustreleasenotes
Вышла версия Rust 1.71.0! Как обычно, тут только избранные куски, а все изменения в ченджлоге.
▪️Новый вариант опции атрибута
#[link] — конкретно kind="raw-dylib" — позволяет на Windows линковаться с динамическими библиотеками, не требуя их наличия во время компиляции. Кросс-компиляция стала немного проще. А, и ещё атрибуты для импорта и экспорта символом из/в DLL, но я недостаточно в этом разбираюсь, чтобы понять разницу.
▪️ Уже имеющиеся варианты ABI обзавелись "*-unwind" вариантами (полный список). Как нетрудно догадаться, паники и исключения, вызывающую раскрутку стека, могут проходить границу между языками. В частности, это означает, что исключения из C++ могут проходить через фреймы Rust-кода, а растовая паника может проходить через фреймы C++-кода. Ловить раскрутку стека, впрочем, можно лишь в фреймах того языка, в котором она была начата.
Это изменение сделает более удобным разработку проектов, смешивающих код на Rust с кодом на других языках. Не *-unwind варианты ABI, как и раньше, абортят процесс, если раскрутка стека пытается пройти по FFI.
▪️Ещё одно изменение, связанное с паниками, но уже исключительно в рамках Rust. Ранее паника во время паники приводила к немедленному аборту процесса. Теперь это ограничение несколько ослабили: паника во время паники не приводит к аборту при условии, что она перехватывается на границе реализации drop. Иными словами, паники внутри деструкторов — которые сами могут быть вызваны из-за паники — могут быть перехвачены и корректно обработаны, не приводя к немедленному прекращению работы.
Но в одном аспекте требования к паникам, наоборот, сделали строже: паника внутри хука на панику сразу ведёт к аборту. В реальном коде это приводило к дедлоку из-за того, что рантайм держал блокировку на глобальный лок для бектрейса.
▪️Стало возможным включать в бинарники скрипты для визуализации значений пользовательских типов в отладчиках. Без этих скриптов в отладчике значение, скажем, Vec<i32> выглядело бы не как последовательность чисел, а как набор из адреса, длины и ёмкости — что, очевидно, не слишком-то полезно. Такими скриптами для визуализации укомплектовывается std. Новый механизм позволяет использовать этот же механизм и пользователям Rust.
▪️Обновлена версия MUSL, используемая для *-linux-musl. Главным образом это означает, что 64-битная версия time_t, позволяющая избежать проблемы 2038 года, используется безусловно для всех систем, включая 32-битные.
▪️Макрос format_args! (на который опираются куча макросов как в std, так и вне её) теперь инлайнит форматируемые значения в форматные строки, если они являются литералами или вложенными format_args!. Если наглядно, то следующие пары вызовов теперь эквивалентны даже не на уровне бинарного кода, а ещё на уровне HIR:
println!("Hello, {}!", "World");
println!("Hello, World!");
println!("[info] {}", format_args!("error"));
println!("[info] error");
println!("[{}] {}", status, format_args!("error: {}", msg));
println!("[{}] error: {}", status, msg);
println!("{} + {} = {}", 1, 2, 1 + 2);
println!("1 + 2 = {}", 1 + 2);
Из того, на что на это влияет:
* в этих случаях в результирующем коде теперь меньше виртуальных вызовов fmt-методов;
* как следствие, макросы вроде log::info! теперь не вредят производительности из-за пробрасывания аргументов через format_args!;
* core::fmt::Arguments::as_str() теперь чаще возвращает Some(_);
* в бинаре теперь может сильно распухнуть секция .text из-за большего количества уникальных строк — особенно, если в коде активно используется макрос dbg!. Не то, чтобы это было большой проблемой, но может выйти боком, если проект компилируется, скажем, под embedded, где каждый байт на счету.
▪️Несколько изменений докатились до стейбла: улучшения расчёта раскладки типов, фикс расчёта приватности для Self-конструктора у кортежных структур, документация для const-инициализации thread local статиков, стабилизация BuildHasher::hash_one.1 922
Внемлите мне, люди, ибо есть единственная наиважнейшая причина обновиться до Rust 1.71.0:
стабилизация
CStr::is_empty()
drops mic1 922
Короче
Я нашёл комикс, который начинается, как slice of life с тупыми гэгами, но постепенно перерастает в удивительно трогательную историю отношений дружбы (при этом, что удивительно, не перерастающей в романтические отношения).
Я вот только что дочитал последний, пятисотый эпизод, и я тронут, у меня глаза на влажном месте.
Почитать можно тут:
webtoons.com/en/slice-of-life/waffles-and-pancakes/list?title_no=1310
Единственное: это совсем не детский комикс. Нет, какой-то особой жести там, но ругательств и некоторой небольшой дичи там хватает. И не говорите, что я вас не предупреждал.
1 922
Repost from Код, коты и карандаш
Yuriosity> А представьте, назвать сына Лжедмитрием
Oleg K> Двоих
1 922
Удивительно, как много людей пишут скрипты на sh/bash — языках, которые вставляют палки в колёса везде, где только можно, и в которых самый прямолинейный способ что-то сделать всегда неправильный
1 922
Repost from Северное техно
В десятые мы были в шаге от отмены для граждан РФ виз в Европу. Сейчас мы тоже в шаге от отмены для граждан РФ виз в Европу, НО ЕСТЬ НЮАНС.
1 922
Автор канала не умеет считать и решил, что ему нужно в ближайшее время делать регистрацию либо visa run, хотя от прописанных 180 дней прошли только около половины.
1 922
Играть в Baba is you — довольно странный опыт. Ты как будто бы постоянно хакаешь игру. А в экстра-уровнях (помеченных точками в различных количествах вместо чисел) ты ещё и используешь второстепенные отличия и способности блоков, которые вроде как не важны для решения.
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
