XRUST.ru » Новости » Zig 0.16: колор функций отменяется, а до 1.0 — принципиально нет
Новости / Программирование

Zig 0.16: колор функций отменяется, а до 1.0 — принципиально нет

23 июля 2026, 06:20 924 0 4

Zig 0.16 переписывает контракт между кодом и вводом-выводом, ускоряет инкрементальную сборку за счёт смены модели зависимостей компилятора — и в очередной раз демонстрирует, что версия 1.0 для команды не цель квартала, а вопрос принципа.

std.Io: async без «цвета функций»

Главное изменение релиза — std.Io как интерфейс, а не встроенный в язык примитив, подчеркивает xrust. Раньше в большинстве языков с async/await действует деление функций на «цветные»: обычная функция не может напрямую вызвать асинхронную, и наоборот, без обвязки. Zig решает это иначе: I/O передаётся как обычный параметр, наравне с аллокатором.

zig

pub fn main(init: std.process.Init) !void {

const gpa = init.gpa;

const io = init.io;

std.log.info("{d} env vars", .{init.environ_map.count()});

}

Это и есть «Juicy Main» — dependency injection для точки входа программы: один параметр process.Init даёт доступ к general-purpose аллокатору, реализации Io, карте переменных окружения и CLI-аргументам без ручной инициализации каждого куска рантайма отдельно.

Практическое следствие: один и тот же код с std.Io может исполняться и на потоковом бэкенде, и на событийном — io_uring на Linux, Grand Central Dispatch на macOS — без переписывания сигнатур функций. Выбор реализации остаётся на стороне вызывающего кода, а не диктуется языком через async/await как отдельную синтаксическую сущность.

Type resolution: из цикла в DAG

В марте Мэттью Лагг влил правку на 30 000 строк, переработавшую внутренний граф зависимостей компилятора — из цикличной структуры в направленный ациклический граф (DAG). До этого граф допускал циклы, что усложняло анализ и тормозило инкрементальные пересборки. DAG даёт две вещи: компилятору проще определить, что действительно нужно пересчитать при правке файла, и при обнаружении циклической зависимости в пользовательском коде сообщение об ошибке становится читаемым, а не абстрактной трассировкой через десяток промежуточных узлов.

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

Что изменилось в поддержке платформ

  • Нативное CI-тестирование расширено на aarch64, loongarch64, powerpc64le, s390x;
  • добавлена кросс-компиляция под aarch64-maccatalyst и x86_64-maccatalyst;
  • появилась начальная поддержка loongarch32-linux;
  • исправлены давние баги стандартной библиотеки на weakly-ordered архитектурах и платформах с нестандартным размером страницы — заметно выросла надёжность на AArch64 (особенно без LSE), LoongArch и Power ISA;
  • big-endian ARM теперь корректно эмитит объектные файлы формата BE8 вместо устаревшего BE32 при таргете ARMv6+;
  • трассировка стека при падениях теперь работает почти на всех основных таргетах.

Требование для post-1.0 релизов зафиксировано прямо в release notes: у Tier 1 платформ должно быть ноль отключённых тестов. Пока это не выполнено — и, соответственно, не выполнено условие для 1.0.

Почему не 1.0

Позиция команды подробно разобрана в июньском материале JetBrains «Why Zig Isn't 1.0 (Yet)»: вопрос, который задают перед каждым потенциально необратимым решением — о чём команда пожалеет, если зафиксирует это в стандарте прямо сейчас. Эндрю Келли признаёт: ярлык 1.0 ускорил бы корпоративное усыновление языка, но сознательно не форсирует релиз. Zig существует на пожертвования через некоммерческий фонд, а не венчурные деньги — это даёт свободу, недоступную VC-backed конкурентам, которым нужно предъявлять инвесторам метрики роста здесь и сейчас.

Аналитика

Для практикующих разработчиков ключевой сигнал релиза — не conкретные фичи, а сам подход к async. Явный Io-параметр снимает классическую проблему функционального цвета, знакомую всем, кто писал на языках с обязательным async/await: невозможность красиво смешать синхронный и асинхронный код в одной кодовой базе. Решение Zig концептуально похоже на то, как язык уже поступил с управлением памятью — сделав аллокатор явным параметром вместо скрытого рантайма. Для системного программирования, embedded и высоконагруженных сервисов это осмысленный компромисс: чуть больше явного кода в сигнатурах в обмен на предсказуемость и отсутствие скрытых аллокаций.

Постоянный отказ от версии 1.0 при этом не мешает продакшн-использованию — сообщество на Хабре в отдельном хабе Zig регулярно обсуждает боевые кейсы, а собственный бэкенд компилятора (отказ от LLVM для части таргетов) снижает внешние зависимости языка. Rust шёл к 1.0 около девяти лет — на этом фоне текущий десятилетний путь Zig без релиза не выглядит аномалией, скорее продолжает традицию системных языков не спешить с фиксацией стандарта.

Другие новости

Пока Zig демонстративно тормозит, Mojo идёт в противоположном направлении: в начале мая вышла первая бета-версия Mojo 1.0, которую команда проекта оценивает как почти готовую к массовому использованию, а финальный стабильный релиз обещан уже этой осенью.


Источники:

Xrust: Zig 0.16: колор функций отменяется, а до 1.0 — принципиально нет



Поделится
4 0

Комментарии


Филиппов: простой парень, а не главная звезда российского спорта
Серебряный призёр Олимпиады-2026 в ски-альпинизме Никита Филиппов не собирается примерять корону главного спортсмена страны. На прямой вопрос о звёздной болезни 23-летний камчатец ответил коротко: с детства хотел оставаться простым парнем — и менять себе не собирается. Медаль, о которой никто не знал заранее Ски-альпинизм дебютировал в олимпийской программе только в этом сезоне, на Играх в Милане и Кортина-д'Ампеццо, и мало кто в России следил за этим видом спорта до февраля 2026-го, отмечает xrust. Тем неожиданнее вышла история: именно Филиппов принёс стране первую медаль тех Игр, финишировав вторым в спринте на 13-й день соревнований. В четвертьфинале и полуфинале он дважды занимал вторые места и выходил в следующий круг напрямую, а в решающем забеге долго держался на четвёртом-пятом местах, но на спуске сумел вырваться вперёд и удержать позицию до финиша. Золото досталось испанцу. Дальше события развивались стремительно: уже 5 марта, спустя две недели после Олимпиады, Никита
2 205 6