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

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

Вчера, 06:20 231 0 1

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 — принципиально нет



Поделится
1 0

Комментарии


Пентагон обеспечит военных новым программным обеспечением на 70 миллионов долларов
Минобороны США объявило о крупном обновлении цифровых инструментов для армии: в рамках программы APFIT выделено более 70 миллионов долларов на разработку и внедрение нового программного обеспечения. Это часть масштабного технологического пакета, который должен ускорить цифровую трансформацию американских вооружённых сил. Программная составляющая APFIT выходит на первый план Американская программа Accelerate the Procurement and Fielding of Innovative Technologies (APFIT) была создана несколько лет назад для того, чтобы ускорить попадание инновационных решений в войска, напоминает xrust. Изначально она фокусировалась на беспилотниках, автономных системах и средствах радиоэлектронной борьбы, но новый раунд закупок показывает: теперь Пентагон делает ставку на программное обеспечение. В свежем пакете контрактов — более 500 млн долларов (примерно 56 млрд рублей), и значительная часть этой суммы направлена именно на цифровые инструменты. На программные решения выделено свыше 70 млн
735 5