Zig: управление пакетами переместили из компилятора в систему сборки

Команда Zig опубликовала девлог за июнь 2026 года с тремя крупными изменениями в язык и инструментарий. Главное: функционал управления пакетами (zig build, zig fetch, zig init, zig libc) перенесли из компилятора в процесс сборки maker. Вместе с ним в исходные тексты вышли HTTP-клиент, сетевая логика, TLS и криптография, протокол Git, алгоритмы сжатия (xz, gzip, zstd, flate, zip) и парсинг build.zig.zon файлов. Практический выигрыш: это функционал теперь можно исправлять без пересборки всего компилятора; maker собирается в режиме ReleaseSafe с включёнными проверками безопасности; криптография и хеширование получают доступ к редким CPU-инструкциям хоста. Процессная иерархия изменилась с плоской (компилятор управляет configurer и maker как siblings) на древовидную (maker, родитель для configurer), что упростит будущий build server без разрывов соединения при перезагрузке конфигурации. Изменение почти полностью обратно совместимо, размер компилятора сжался на 4% (14,1 → 13,5 MiB), флаги --maker-optflag и --zig-lib-dir заменили на переменные окружения. Также в девлоге: SPIR-V бэкенд ожил с новым@SpirvType билтином для типов, которые невозможно выразить в системе типов Zig, параллельной кодогенерацией через thread pool компилятора, поддержкой объектных файлов .spv и 10%-ным ростом тестов (49% passing на spirv64-vulkan). Третье изменение: @bitCast переопределили согласно языковому предложению #19755, теперь семантика единообразна во всех бэкендах и при компайл-тайм вычислениях вместо реинтерпретации памяти.

Ключевые факты

  • Управление пакетами, HTTP, TLS, Git и сжатие, все вышли из компилятора в процесс maker, размер бинарника Zig сжался на 4%
  • Благодаря отделению, обновления этих компонентов больше не требуют пересборки компилятора и получают защиту ReleaseSafe
  • Процессная иерархия переиндексирована с соседства к иерархии (maker → configurer), что позволит будущему build server работать без разрывов
  • SPIR-V бэкенд обновлён: новый @SpirvType для типов GPU, параллельная кодогенерация, поддержка .spv объектных файлов, 49% тестов passing
  • @bitCast получил новую семантику согласно языковому предложению, теперь единообразно во всех бэкендах, исправлены десятки ошибок в LLVM бэкенде

Почему это важно

Выделение пакет-менеджера из компилятора, стандартный паттерн (npm отдельно от Node, cargo отдельно от rustc). Zig наконец это сделал, что означает более гибкую разработку: баги в загрузке пакетов, TLS или Git-логике исправляются без пересборки компилятора. ReleaseSafe режим для maker добавляет проверки безопасности (bounds checking, overflow detection), а доступ к редким CPU-инструкциям улучшит скорость хеширования и криптографии. Новая процессная иерархия решает проблему с ZLS (Language Server), при изменении build.zig maker не потребует выхода, сервер сможет остаться живым и просто уведомить клиента об изменении конфигурации.

Кому это важно

Разработчикам на Zig: проще обновлять инструментарий, безопаснее работать с сетью, IDE (ZLS) будет удобнее. Мейнтейнерам языка: можно отправлять патчи за часы вместо дней пересборки. Участникам GPU/шейдер-сцены: SPIR-V обновления открывают дорогу для реальных вычислительных ядер, тесты passing выросли с ~44% до 49%, это близко к практическому использованию.

Как это применить

Пользователи Zig автоматически получат новые версии при обновлении языка, никаких дополнительных действий. Разработчикам пакетов стоит протестировать сборку с новыми флагами окружения (ZIG_DEBUG_MAKER, ZIG_LIB_DIR вместо --maker-optflag и--zig-lib-dir). Для шейдеров и GPU-кода: проверить примеры с новым @SpirvType и убедиться, что ваша логика работает (bug reports welcome). LLVM-бэкенд улучшения применяются автоматически при компиляции C-кода и arbitrary bit-width целых чисел.

Можно ли доверять

Это официальный девлог разработчиков Zig, опубликованный на ziglang.org главным архитектором языка Andrew Kelley, с подписями других мейнтейнеров. Изменения уже в main branch Zig, описаны с технической точностью, процесс tree-diagrams и параметры совпадают с реальностью инструмента. SPIR-V и @bitCast изменения ссылаются на реальные issue (#20550, #23326, #35461, #19755) в Codeberg (хранилище Zig). Однако девлог написан авторами изменений, потому может содержать оптимизм, их оценка «почти полностью обратно совместимо» стоит проверить на ваших конкретных проектах.

Риски и подводные камни

Изменение флагов (--maker-optflag → ZIG_DEBUG_MAKER, --zig-lib-dir → ZIG_LIB_DIR) может сломать скрипты CI/CD, использовавшие старые опции. Процессная иерархия новая, могут быть corner cases с watch-режимом или кэшированием конфигурации (об этом авторы честно говорят в TODO). SPIR-V backend только на 49% готов, половина тестов ещё skipped, шейдеры и compute kernels пока экспериментальны. @bitCast семантика изменилась, старый код, полагавшийся на переинтерпретацию памяти, может сломаться (авторы проверили компилятор и стандартную библиотеку, но в пользовательских проектах нужно аудировать). Andrew Kelley будет два месяца занят конференциями, рост в July, август замедлится.

«Теперь, после изменений, описанных в этой статье девлога, процесс выглядит так: zig build (компилятор) → maker (система сборки + пакет-менеджер) → configurer (логика пользователя). Таким образом, когда конфигурацию нужно перезапустить, процесс maker может продолжить жить, потому что он теперь родитель, а не сосед.»

— Andrew Kelley, девлог Zig 2026