#prog #rust #article
Shortcomings of Procedural Macros
Или как в процедурный макрос, определённый на impl-блоке, прокинуть информацию о методах с реализацией по умолчанию из определения трейта.
Спойлер: всё в рамках языка, без IO между макросами, но выглядит всё равно как хак.
Shortcomings of Procedural Macros
Или как в процедурный макрос, определённый на impl-блоке, прокинуть информацию о методах с реализацией по умолчанию из определения трейта.
Спойлер: всё в рамках языка, без IO между макросами, но выглядит всё равно как хак.
cryptical.xyz
Shortcomings of Procedural Macros – Cryptical
and how to overcome them
🤔6❤1
#prog #rust
Faster linking times with 1.90.0 stable on Linux using the LLD linker
Faster linking times with 1.90.0 stable on Linux using the LLD linker
TL;DR: rustc will start using the LLD linker by default on the x86_64-unknown-linux-gnu target starting with the next stable release (1.90.0, scheduled for 2025-09-18), which should significantly reduce linking times.From our prior testing, we don't really expect issues to happen in practice. It is a drop-in replacement for the vast majority of cases, but lld is not bug-for-bug compatible with GNU ld.
In any case, using rust-lld can be disabled if any problem occurs: use the -C linker-features=-lld flag to revert to using the system's default linker.
❤🔥6🎉3🤩1
#prog #rust #serde #article
Be Careful Zero-Copying Strings with serde
TL;DR: из-за того, что строки во многих форматах передачи данных (JSON, например) требуют экранирования специальных символов, строки с подобными символами не могут быть десериализованы в
Be Careful Zero-Copying Strings with serde
TL;DR: из-за того, что строки во многих форматах передачи данных (JSON, например) требуют экранирования специальных символов, строки с подобными символами не могут быть десериализованы в
&str (которые указывают на данные из входа). Для того, чтобы поддержать подобные строки, но по мере возможности все же не копировать данные, используйте Cow<str> с атрибутом #[serde(borrow)] на поле.💯8❤3👌2
#prog #rust
Rust compiler performance survey 2025 results
Помимо того, что вынесено в заголовок — немного о конкретных усилиях для уменьшения времени компиляции.
Rust compiler performance survey 2025 results
Помимо того, что вынесено в заголовок — немного о конкретных усилиях для уменьшения времени компиляции.
blog.rust-lang.org
Rust compiler performance survey 2025 results | Rust Blog
Empowering everyone to build reliable and efficient software.
👍1🤔1
#rust
crates.io phishing campaign
crates.io phishing campaign
We received multiple reports of a phishing campaign targeting crates.io users (from the rustfoundation.dev domain name), mentioning a compromise of our infrastructure and asking users to authenticate to limit damage to their crates.
These emails are malicious and come from a domain name not controlled by the Rust Foundation (nor the Rust Project), seemingly with the purpose of stealing your GitHub credentials.
<...>
Do not follow any links in these emails if you receive them, and mark them as phishing with your email provider.
🤯3🤔1
#prog #rust #itsec
crates.io: Malicious crates faster_log and async_println
crates.io: Malicious crates faster_log and async_println
The users in question were immediately disabled, and the crates in question were deleted from crates.io shortly after. We have retained copies of all logs associated with the users and the malicious crate files for further analysis.
The deletion was performed at 15:34 UTC on September 24, 2025.
#prog #rust #rustreleasenotes
Вышла версия Rust 1.90.0!.. Больше недели назад. В свою защиту могу сказать, что в этой версии заметных для большинства пользователей изменений в языке и нету.
Как всегда, тут только избранные части, всё остальное в детальных заметках о релизе.
▪️Как и было обещано, для таргета
▪️В качестве расширения к методам, добавленным в Rust 1.66.0, добавили методы
▪️
▪️Старый PR докатился до стейбла: в const-контексте наконец можно вызывать
▪️Реализацию
▪️Реализации
▪️Компилятор теперь не даёт скомпилировать код, который упоминает ABI, неподдерживаемый на целевой платформе.
Вышла версия Rust 1.90.0!.. Больше недели назад. В свою защиту могу сказать, что в этой версии заметных для большинства пользователей изменений в языке и нету.
Как всегда, тут только избранные части, всё остальное в детальных заметках о релизе.
▪️Как и было обещано, для таргета
x86_64-unknown-linux-gnu теперь по умолчанию используется более быстрый линкер lld.▪️В качестве расширения к методам, добавленным в Rust 1.66.0, добавили методы
uX::*_sub_signed (wrapping, checked, overflowing и saturating варианты) для корректного вычитания чисел с разной знаковостью.▪️
CString, CStr и Cow<CStr> теперь можно сравнивать на равенство между собой. Нет, PartialOrd между ними не реализован. Нет, я не знаю, почему.▪️Старый PR докатился до стейбла: в const-контексте наконец можно вызывать
reverse на слайсах. Также теперь там можно вызывать на числах с плавающей точкой различные методы для округления и fract для извлечения дробной части.▪️Реализацию
Default для iter::Fuse привели в соответствие с документацией: теперь default создаёт Fuse, оборачивающий значение по умолчанию внутреннего итератора, вместо создания всегда пустого итератора.▪️Реализации
io::Write для TcpStream и UnixStream теперь на Linux пишут данные с флагом MSG_NOSIGNAL. Это означает, что запись в померший нижележащий сокет теперь возвращает EPIPE — или, в терминах Rust, io::Error, у которого kind() возвращает ErrorKind::BrokenPipe. Данное изменение делает поведение консистентным с тем, как сокеты ведут себя в других местах в std.▪️Компилятор теперь не даёт скомпилировать код, который упоминает ABI, неподдерживаемый на целевой платформе.
👍6❤1
#prog #rust #article
From Rust to Reality: The Hidden Journey of fetch_max
From Rust to Reality: The Hidden Journey of fetch_max
Why would Rust providefetch_maxas a built-in intrinsic? Intrinsics usually exist to leverage specific hardware instructions. But x86-64 doesn't have anatomic maxinstruction. So there had to be a CAS loop somewhere in the pipeline.
<...>
So I started digging. What I found was a fascinating journey through five distinct layers of compiler transformations, each one peeling back another level of abstraction, until I found exactly where that loop materialized. Let me share what I discovered.
❤3