Zig выкинул менеджер пакетов из компилятора

05.07.2026 · 5 мин

Знаете, что бесит в большинстве компиляторов? Они пытаются быть всем сразу — и парсить код, и оптимизировать, и даже тянуть зависимости из интернета. Zig шёл этим путём, пока Эндрю Келли не решил, что хватит.

30 июня 2026 года он сделал вещь, которая на первый взгляд кажется странной: вынес всю логику управления пакетами из компилятора в систему сборки. Теперь zig build, zig fetch, zig init и zig libc — это не часть компилятора, а часть процесса maker.

Что изменилось и почему это важно

Раньше архитектура выглядела так:

БЫЛО: До разделения процессов
───────────────────────────────────────────────────
zig build
└── builder
    ├── загрузка пакетов
    ├── логика build.zig
    └── система сборки

⚠️ Любое изменение build.zig → полный рестарт
До разделения всё было связано в один процесс

Это создавало проблему: когда пользователь менял build.zig, приходилось перезапускать весь процесс, включая управление зависимостями. Неэффективно и неудобно.

Теперь процесс разделён на два отдельных:

СТАЛО: После разделения
───────────────────────────────────────────────────
zig build (компилятор)
└── maker (сборка + пакеты) ← живёт постоянно
    └── configurer (build.zig) ← перезапускается при
         изменении

✅ Изменился build.zig → перезапустился только
   configurer, maker продолжает работу
Теперь изменения build.zig не рвут весь цикл сборки

Поменялся build.zig? Перезапустится только configurer, а maker продолжит работу. Для режима --watch это особенно важно: не надо переподключаться к серверу и заново выкачивать пакеты.

Что конкретно уехало из компилятора

Вот что теперь поставляется в исходниках, а не внутри бинарника:

Это означает две вещи. Во-первых, можно патчить уязвимости без пересборки компилятора. Во-вторых, код работает в режиме ReleaseSafe, то есть с проверками безопасности вместо голой оптимизации.

Практические последствия для разработчиков

Размер бинарника уменьшился на 4% — с 14.1 до 13.5 MiB. Не космос, но приятно. Флаг --maker-opt заменили на переменную окружения ZIG_DEBUG_MAKER, --zig-lib-dir — на ZIG_LIB_DIR. Это небольшие, но ломающие изменения, о которых стоит помнить, если у вас есть скрипты.

Главное же — это шаг к build server protocol, который должен упростить работу ZLS. До этого IDE-клиент должен был переподключаться при каждом изменении build.zig. Теперь сервер сможет сообщать клиенту об изменениях конфигурации без разрыва соединения.

Ещё один эффект — возможность оптимизировать криптографию под конкретный CPU. Редкие инструкции, которые нельзя использовать при дистрибуции, теперь можно задействовать при локальной сборке. Автор называет это «AOT cake and eat JIT too» — и смысл тут простой: и скорость дистрибуции, и локальная оптимизация.

Что дальше

Фича почти готова, но до тега 0.17.0 осталось три вещи:

Эндрю обещает закончить к августу, но признаёт, что июльские конференции могут помешать. Он также просит помощи сообщества — и это вполне нормальная практика для open source.

Выводы

Zig упростил архитектуру: компилятор стал меньше, а система сборки — умнее. Это снижает связность, облегчает обновления и делает watch-режим заметно удобнее.

Итог простой: меньше кода внутри бинарника, больше гибкости снаружи, и хороший фундамент для следующего поколения инструментов вокруг Zig.

Ссылки

Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.