rustc переходит на свою схему манглинга символов: бектрейсы становятся читаемее
20.11.2025Начиная с ночной сборки от 21 ноября 2025 года компилятор по умолчанию использует собственную схему манглинга символов вместо унаследованной от C++. В бектрейсах и выводе отладчиков теперь видны полные имена функций с параметрами дженериков, а не короткие огрызки.
Откуда взялась старая схема
Исторически Rust перенял у C++ соглашение о кодировании имён Itanium C++ ABI. Схема оказалась неудобной по нескольким причинам: она теряла информацию об инстанцированиях дженерик-параметров, была внутренне непоследовательной, использовала символ точки, поддержка которого есть не на всех платформах, и включала непрозрачный хеш, зависящий от внутренних деталей компилятора.
Из-за этого разные части компилятора всё равно не сходились с ней и пользовались собственным деманглером. Собственная схема, известная как v0, разрабатывается с 2018 года.
Что меняется на практике
Новая схема кодирует информацию однозначно и обратимо, использует только латинские буквы, цифры и подчёркивание, и не зависит от того, как устроен компилятор изнутри.
В бектрейсах теперь видно полное имя: f::foo::<alloc::vec::Vec<(alloc::string::String, &[u8; 123])>> вместо f::foo. Особенно это заметно для асинхронного кода, замыканий и обобщённых функций — то есть ровно там, где старое сокращение делало стек нечитаемым.
Цена вопроса
Символы новой схемы длиннее. Если символы не вырезаются, а по умолчанию они не вырезаются, это означает небольшой рост времени линковки и размера бинарных файлов.
Второе ограничение важнее: старые версии инструментов и дистрибутивов могут не понимать v0 и показывать неразобранные имена. Это касается баг-трекеров, деобфускаторов и сборочных скриптов, которые разбирают имена символов.
Откат — флаги -Csymbol-mangling-version=legacy -Zunstable-options. Включить v0 на стабильной ветке и на бета уже можно через -Csymbol-mangling-version=v0.
Готовые реализации разбора имён лежат в проекте rustc-demangle — на Rust и на C.
Оригинал
Switching to Rust's own mangling scheme on nightly от 20 ноября 2025 года; RFC 2603
Упоминаний: 1 · Просмотров: 2