Биткойн

Прогресс rustc_codegen_cranelift: подробный отчет за июнь 2025 года

Биткойн
Progress report on rustc_codegen_cranelift (June 2025)

Обзор ключевых достижений и улучшений проекта rustc_codegen_cranelift в первой половине 2025 года, включая поддержку обработки исключений, развитие ARM64, расширение возможностей SIMD и улучшения в работе с ABI.

Проект rustc_codegen_cranelift продолжает динамично развиваться, демонстрируя значительный прогресс в области оптимизации и расширения возможностей компилятора Rust. В июне 2025 года было зафиксировано 476 коммитов, которые принесли существенные улучшения как в функциональности, так и в стабильности. Этот отчет служит подробным обзором наиболее заметных достижений и текущих вызовов, с которыми столкнулась команда разработчиков. Одним из ключевых событий стала реализация поддержки обработки исключений и очистки стека во время аварийного завершения программы на Linux, что стало долгожданным шагом для повышения надежности и гибкости cg_clif – компонента rustc, использующего Cranelift в качестве backend. Исторически работа над поддержкой unwinding началась в рамках бакалаврской работы одного из ведущих участников проекта.

Хотя изначальный код почти полностью функционировал, возникли сложности с размещением дополнительных инструкций перемещения после вызовов функций с возможностью выброса исключений. Эти инструкции должны были выполняться до перехода к блокам обработки исключений, однако из-за особенностей регистрового аллокатора Cranelift такие переходы происходили напрямую, минуя необходимые операции, что приводило к некорректному поведению. Позже, благодаря усилиям Криса Фоллина, ведущего разработчика Cranelift, удалось переработать внутренности регистрового аллокатора и расширить IR Cranelift, что позволило решить описанную проблему и плавно интегрировать поддержку исключений в cg_clif. Тем не менее, на данный момент поддержка unwinding по умолчанию отключена из-за выявленных проблем с производительностью сборки, а также ограничена поддержкой лишь на Linux. На платформах macOS и Windows необходимы дополнительные разработки: macOS требует реализации специфичной схемы кодирования таблиц unwind, а Windows использует сложный подход на основе funclets в модели SEH, который сейчас не поддерживается Cranelift, ориентированным на landingpads.

Помимо улучшений в управлении исключениями, важным направлением стала поддержка ARM64. Теперь вся система непрерывной интеграции успешно собирает и тестирует проекты на нативных ARM64 Linux устройствах, что значительно расширяет проверяемый пул платформ. Был улучшен механизм использования встраиваемых ассемблерных вставок с поддержкой векторных регистров, а также исправлена совместимость популярных зависимостей, таких как half и bytecount, благодаря чему появилась возможность более уверенно разрабатывать и запускать Rust-код на ARM64. В области числовых типов были внесены существенные нововведения. Благодаря усилиям сообщества, реализована поддержка нестабильных типов данных f16 и f128, ранее недоступных в Cranelift backend.

Это расширяет возможности для численных вычислений и научных задач, особенно там, где требуется повышенная точность или оптимизация по занимаемому объему данных. Поддержка этих форматов уже наблюдается в нескольких архитектурах, включая x86_64, aarch64, riscv64 и s390x, демонстрируя мультиплатформенную ориентацию разработки. Немаловажно отметить, что в рамках оптимизации и повышения эффективности кода разработчики стремятся сократить дублирование логики между различными backend-ами компилятора. В частности, были проведены две крупные интеграции в rustc, направленные на совместное использование кода между cg_clif и cg_ssa – традиционным backend-ом компилятора. Это снижает общие затраты на поддержку и ускоряет развитие обеих систем, повышая стабильность и согласованность.

Планируется в дальнейшем интегрировать обработку встроенного ассемблера, опираясь на механизм cg_ssa, что позволит унифицировать и улучшить поддержку inline asm в будущем. В сфере SIMD расширяется набор поддерживаемых вендорских интринсиков, что особенно актуально для платформ ARM64 и x86_64. Были добавлены новые инструкции, такие как vaddlvq_u8 и vld1q_u8_x4 для arm64, а также разработаны и улучшены средства динамического доступа к элементам SIMD-векторов, что открывает двери для более эффективных вычислительных решений и улучшения производительности приложений, интенсивно использующих векторные операции. Также удалось решить часть проблем с ABI, в частности в области обработки 128-битных целочисленных вызовов функций. В результате обновления до версии 1.

0 инструментов abi-cafe уменьшилась необходимость в ручном патчинге исходного кода, что благоприятно сказывается на поддержке и возможности быстрого внедрения будущих улучшений и исправлений. Тем не менее, сохраняются проблемы с совместимостью ABI в разных средах. Например, на ARM64 Linux наблюдается незначительное несовпадение с C ABI, хотя внутренний Rust ABI работает корректно. На ARM64 macOS и x86_64 Windows ситуация сложнее из-за различных особенностей вызовов и передачи значений, особенно для больших типов данных, таких как i128, что требует осторожного подхода при смешивании cg_clif и cg_llvm. Помимо технических достижений, команда активно приглашает сообщество к участию, открывая возможности для новых контрибьюторов ознакомиться с доступными задачами разного уровня сложности.

Автоматическая торговля на криптовалютных биржах Покупайте и продавайте криптовалюты по лучшим курсам Privatejetfinder.com (RU)

Далее
Show HN
Пятница, 10 Октябрь 2025 ShotCanvas – бесплатный инструмент для создания стильных скриншотов за секунды

Узнайте, как ShotCanvas помогает превратить обычные скриншоты в привлекательные изображения с уникальными фонами. Подробно о функционале, преимуществах и отзывах пользователей.

TikTok's 'ban' problem could end soon with a new app and a sale
Пятница, 10 Октябрь 2025 Как новый TikTok и сделка могут решить проблему запрета приложения в США

Обзор возможного выхода из кризиса вокруг запрета TikTok в США, включая перспективы продажи и запуск новой версии приложения, а также влияние этих изменений на пользователей и рынок цифровых технологий.

Luigi Lineri, the Man Who Collects and Categorizes Stones (2024)
Пятница, 10 Октябрь 2025 Луиджи Линери: Человек, который собирает и классифицирует камни с реки Адидже

История итальянского коллекционера Луиджи Линери, посвятившего более 50 лет сбору, очистке и классификации камней с реки Адидже в Северной Италии, а также его уникальное восприятие камней как живых форм и символов природы и времени.

Micro Common Lisp
Пятница, 10 Октябрь 2025 Micro Common Lisp: Маленький, но мощный интерпретатор для поклонников Lisp

Обзор Micro Common Lisp — компактного интерпретатора для минималистичной версии Common Lisp, который работает в ограниченных условиях и поддерживает ключевые функции языка. Рассмотрены особенности, возможности и области применения этого уникального проекта.

Why don't we have a permanent OSS license?
Пятница, 10 Октябрь 2025 Почему до сих пор нет постоянной лицензии для открытого программного обеспечения?

Анализ причин отсутствия постоянной лицензии для коммерческого открытого программного обеспечения, вызовы и возможные пути решения проблемы, влияющие на доверие сообщества и будущее OSS.

The Junior Developer Extinction:We're All Building the Next Programming Dark Age
Пятница, 10 Октябрь 2025 Исчезновение младших разработчиков: формируем новое тёмное программное время

В современном мире искусственный интеллект кардинально меняет индустрию программирования, вызывая глубокие изменения в способах обучения и работы младших разработчиков. Разобраться в причинах появления цифровой «тёмной эпохи» и её последствиях для IT-сообщества поможет подробный анализ текущих тенденций и вызовов.

Chip-Chat: Challenges and Opportunities in Conversational Hardware Design (2023)
Пятница, 10 Октябрь 2025 Chip-Chat: Инновации и вызовы в разработке аппаратного обеспечения с использованием разговорных ИИ

Современные технологии трансформации аппаратного дизайна с помощью больших языковых моделей открывают новые горизонты для инженеров и разработчиков. Разбор ключевых трудностей и возможностей, возникающих при интеграции ИИ в разработку чипов, и примеры успешных решений в индустрии.