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, карте переменных окружения и