Домой Новости Язык программирования Zig 0.17 получил переработанную систему сборки

Язык программирования Zig 0.17 получил переработанную систему сборки

Вышел релиз языка программирования Zig 0.17 с обновленным ELF-линкером, улучшенной инкрементальной компиляцией и оптимизированной системой сборки.

1
0

Состоялся релиз Zig 0.17 — языка программирования общего назначения, ориентированного на системное программирование. Новая версия приносит значительные улучшения в работу ELF-линкера, системы сборки, а также расширяет поддержку инкрементальной компиляции для проектов под x86_64 Linux.

Логотип языка программирования Zig

Развитие возможностей ELF-линкера

Одним из ключевых направлений разработки стал новый ELF-линкер, представленный в предыдущем релизе. В версии 0.17 он получил полноценную поддержку архитектур x86_64 и SPARC64, а также частичную поддержку LoongArch. Теперь линкер способен генерировать статические и разделяемые библиотеки, корректно обрабатывать DWARF-информацию для отладки, GNU-версионирование символов, генерацию GOT, копирование релокаций, таблицы хэшей символов и произвольное выравнивание секций.

Хотя этот компонент еще не стал линкером по умолчанию, так как не полностью повторяет функциональность прежней реализации, разработчики отмечают его пригодность для сборки большинства Zig-проектов под x86_64 Linux. Команда планирует окончательно отказаться от устаревшего ELF-линкера в следующем релизе. Этот прогресс также напрямую способствует улучшению инкрементальной компиляции, позволяя пересобирать только измененные части проекта. Для проектов под x86_64 Linux эта функция теперь совместима с режимом отслеживания (watch mode), что обеспечивает практически мгновенную пересборку при обнаружении изменений в коде.

Оптимизация системы сборки и поддержка протоколов

Значительные изменения претерпела система сборки Zig. Теперь этапы конфигурации и исполнения графа сборки выполняются как независимые процессы. Разработчики также переработали систему кэширования: новый бинарный формат кэша стал примерно на 25% компактнее, а скорость обработки попаданий в кэш в тестах выросла на 5–10%.

Внедрен новый протокол Build Server Protocol (BSP). Он предназначен для предоставления сторонним инструментам, таким как IDE, доступа к графу сборки, шагам процесса, параметрам, зависимостям, генерируемым файлам и текущему статусу проекта. Из-за этих архитектурных правок на данный момент возникли временные проблемы с совместимостью в сервере Zig Language Server (ZLS). Команды разработчиков Zig и ZLS уже ведут совместную работу над расширением протокола, чтобы восстановить и улучшить интеграцию языкового сервера.

Языковые изменения и расширение поддержки платформ

В языке произошел ряд изменений: скорректировано поведение @bitCast, удален старый синтаксис умножения массивов в пользу @splat, а также устранены некоторые устаревшие конструкции. Важное изменение коснулось взаимодействия с C: конструкция @cImport, считавшаяся устаревшей в версии 0.16, была полностью удалена. Функция трансляции C в Zig переносится во внешний официальный пакет translate-c, поддерживаемый Zig Software Foundation, что позволит ему развиваться независимо от основного компилятора.

Список поддерживаемых платформ продолжает расширяться. Добавлены цели loongarch32-linux, обеспечена поддержка 64-битной архитектуры SPARC, а также добавлена ранняя поддержка xtensa-linux. Улучшена совместимость с OpenBSD, FreeBSD, NetBSD, ARM, AArch64 и другими архитектурами. Инструментарий на базе LLVM обновлен до версий LLVM и Clang 22.1.8. Для кросс-компиляции теперь доступна glibc 2.44, включены заголовки Linux kernel 7.2, а musl обновлен до версии 1.2.5 с исправлениями безопасности. Минимальная версия Linux для стандартной библиотеки остается прежней — Linux 5.10.

Кроме того, в Zig 0.17 был переписан линкер SPIR-V, получивший возможность инкрементальной компиляции и связывания внешних объектных файлов SPIR-V. Бэкенд компилятора SPIR-V стал многопоточным, а работа над собственными бэкендами компилятора для LoongArch и AArch64 продолжается.

Источник: https://linuxiac.com