TGViewer
Блог* Блог* @dereference_pointer_there · 1.98K subscribers
Post #10494 891
Блог* #prog #rust #article How to speed up the Rust compiler in December 2025
#prog #rust

Одно из изменений, упомянутых в статье — это переделка fmt::Arguments (aka того, что возвращает format_args!). До этого изменения в структуре были три слайса (точнее, ссылок на них): слайс строковых составляющих форматной строки, слайс с опциями форматирования и слайс собственно аргументов (со стёртыми типами). Шесть машинных слов — это довольно много. После её изменения этот тип состоит из всего двух машинных слов: указатель на шаблон и указатель на аргументы, что позволяет передавать значения этого типа в регистрах.

Как это работает? Представление подробно расписано в исходниках, но если коротко: строка, описывающая шаблон, переписывается в байтовый массив, который содержит куски разных типов. В зависимости от префикса каждый кусок распознаётся как литерал строки, как ссылка на аргумент для форматирования или описание опций форматирования. Среди этих кусков также есть и маркер конца шаблона: ноль. Хранение конца шаблона внутри самого шаблона позволяет не хранить ни длину шаблона, ни длину слайса аргументов.

Как Мара пишет в Mastodon:

'Hello world' compiles 3% faster and a few bigger projects like Ripgrep and Cargo compile 1.5% to 2% faster. And those binaries are roughly 2% smaller. 🎊


Надо отметить, что по сравнению со старым дизайном новый кое в чём проигрывает: отдельные литеральные части шаблона теперь лежат внутри неделимого массива и потому не могут быть дедуплицированы. На практике, впрочем, это не должно быть большой проблемой, поскольку зачастую эти строковые куски занимают меньше места, чем (толстые) указатели на них.
GitHub New format_args!() and fmt::Arguments implementation by m-ou-se · Pull Request #148789 · rust-lang/rust Part of #99012 This is a new implementation of format_args!() and fmt::Arguments. With this implementation, fmt::Arguments is only two pointers in size. (Instead of six, before.) This makes it the ...
  • 👍 7
  • ❤ 2
  • 🤔 2
More from @dereference_pointer_there
  1. Oct 14, 2026r/rust (потому что написано вроде на Tauri)
  2. Oct 14, 2026advanced <...> technology such as a shopping cart
  3. Oct 14, 2026Source
  4. Oct 14, 2026#prog #rust #rustasync #article Tokio Gives Progress, Not Ordering: Scheduling 1M Tasks TL…
  5. Oct 14, 2026#game Slay the Spire 2
  6. Oct 13, 2026#prog #rust #suckassstory github.com/rust-lang/rust/issues/164250 use std::sync::Mutex; st…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →