Услужливый дурак опаснее врага (И.А. Крылов).

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


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

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

Zig создавался как современный системный язык программирования, ориентированный на разработку производительного и надёжного программного обеспечения. Он стремится объединить преимущества C/C++ с более безопасной моделью разработки, удобной кросс-компиляцией и минимальной зависимостью от внешних инструментов.

Версия Zig 0.17.0 стала результатом примерно пяти месяцев работы. В подготовке релиза участвовали 206 разработчиков, которые внесли 925 изменений в исходный код проекта.

Официальная информация о выпуске доступна на сайте проекта Zig: релиз Zig 0.17.0.

 

Главное изменение Zig 0.17.0 — новая архитектура системы сборки

Самым заметным нововведением стала полностью переработанная система сборки. Ранее выполнение пользовательского файла build.zig и работа самой системы сборки происходили внутри одного процесса. Теперь эти задачи разделены.

Новая архитектура использует два отдельных компонента:

  • Configurer — отвечает за обработку пользовательского файла build.zig и создание конфигурации проекта;
  • Maker — выполняет непосредственно построение графа сборки, управление зависимостями и запуск операций компиляции.

 

Такое разделение позволило уменьшить количество лишних операций при каждом запуске команды zig build. Теперь изменения в коде проекта не требуют повторной пересборки частей системы сборки, которые остаются неизменными.

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

 

Новый Build Server Protocol для инструментов разработки

В Zig 0.17.0 появился новый Build Server Protocol (BSP), который предназначен для взаимодействия системы сборки с внешними программами.

Благодаря этому протоколу IDE и другие инструменты смогут получать информацию о:

  • графе зависимостей проекта;
  • этапах сборки;
  • параметрах компиляции;
  • созданных файлах;
  • текущем состоянии процесса сборки.

 

Особенно важным это изменение является для проекта ZLS — языкового сервера Zig. Ранее ему приходилось использовать собственные решения для анализа системы сборки. Новый протокол должен сделать интеграцию более стабильной и производительной.

 

Переработанная система кэширования

В новой версии Zig разработчики также обновили механизм кэширования. Теперь вместо текстового формата используется бинарный формат данных.

По заявлениям команды Zig, новый формат:

  • уменьшает размер кэша примерно на 25%;
  • ускоряет обработку сохранённых данных;
  • снижает нагрузку на файловую систему;
  • позволяет быстрее определять необходимость повторной сборки.

 

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

 

Улучшенный ELF-компоновщик и инкрементальная компиляция

Ещё одним важным направлением развития Zig 0.17.0 стал собственный ELF linker. Его разработка началась ранее, но в новой версии он получил значительные улучшения.

Теперь компоновщик поддерживает:

  • x86_64 Linux;
  • SPARC64;
  • частичную поддержку LoongArch;
  • создание статических и динамических библиотек;
  • GNU symbol versioning;
  • DWARF debugging information;
  • работу с GOT и таблицами символов.

 

Пока новый ELF-компоновщик не используется по умолчанию, поскольку ещё не полностью заменяет старую реализацию. Однако разработчики считают, что большинство проектов для x86_64 Linux уже могут успешно работать с новым вариантом.

Улучшение компоновщика напрямую связано с появлением полноценной поддержки инкрементальной компиляции. Теперь Zig может пересобирать только изменённые части проекта вместо полной повторной компиляции.

 

Изменения языка программирования Zig

Помимо внутренних улучшений, Zig 0.17.0 получил ряд изменений самого языка.

  • Изменено поведение функции @bitCast;
  • удалён старый синтаксис умножения массивов;
  • для повторения элементов теперь рекомендуется использовать @splat;
  • удалены устаревшие конструкции языка;
  • улучшена формальная проверка грамматики языка.

 

Также продолжилась работа над взаимодействием с языком C. Функция @cImport, которая ранее считалась устаревающей, была удалена. Вместо неё перевод C-заголовков постепенно переносится в отдельный пакет translate-c.

 

Обновление поддержки платформ

Zig традиционно уделяет большое внимание кросс-компиляции, и версия 0.17.0 продолжает это направление.

В новой версии улучшена поддержка следующих платформ:

  • loongarch32-linux;
  • SPARC 64-bit;
  • xtensa-linux;
  • OpenBSD;
  • FreeBSD;
  • NetBSD;
  • ARM и AArch64.

 

Кроме того, обновлена инструментальная база: Zig 0.17.0 использует LLVM и Clang 22.1.8, glibc 2.44, заголовки Linux kernel 7.2 и обновлённую версию musl.

 

Что означает выход Zig 0.17.0 для разработчиков

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

Главные преимущества новой версии:

  • быстрее выполняется команда zig build;
  • меньше времени требуется на повторную компиляцию;
  • улучшается интеграция с IDE;
  • становится проще создание крупных проектов;
  • расширяются возможности кросс-компиляции.

 

Выводы

Zig 0.17.0 является важным шагом на пути к стабильной версии 1.0. Вместо большого количества новых синтаксических возможностей разработчики сосредоточились на фундаментальных улучшениях инфраструктуры языка.

Переработанная система сборки, новый Build Server Protocol, улучшенный ELF-компоновщик и инкрементальная компиляция делают Zig более привлекательным инструментом для системного программирования, разработки серверов, встроенных устройств и высокопроизводительных приложений.

Несмотря на то что Zig пока находится до версии 1.0 и изменения API всё ещё возможны, направление развития проекта показывает стремление создать современную альтернативу традиционным инструментам C/C++ разработки.

 

Часто задаваемые вопросы

Главные изменения — новая архитектура системы сборки, Build Server Protocol, улучшенный ELF-компоновщик, поддержка инкрементальной компиляции и обновления языка.

Разработчикам новых проектов рекомендуется использовать новую версию. Для существующих проектов стоит проверить совместимость, так как некоторые изменения системы сборки требуют обновления build.zig.

Старая архитектура объединяла несколько задач в одном процессе. Разделение компонентов позволяет ускорить сборку и улучшить интеграцию со сторонними инструментами.

Zig не является прямой заменой всех возможностей C или C++, но предлагает современный подход к системному программированию, сохраняя низкоуровневый контроль и высокую производительность.

Полные технические детали опубликованы в официальных release notes проекта Zig: Zig 0.17.0 Release Notes.

Редактор: AndreyEx

Если статья понравилась, поделитесь ей в социальных сетях

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Это может быть вам интересно


Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала