Zig
- title
- Zig
- type
- entity
- summary
- Системный язык Эндрю Келли; ручная память через арены и аллокаторы, без скрытых аллокаций, comptime как механизм работы с типами
- tags
- language, systems-programming
- created
- 2026-04-30
- updated
- 2026-07-29
- lang
- ru
- translation_of
- zig
- source_updated
- 2026-07-29
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Zig - системный язык программирования, созданный Эндрю Келли (Andrew Kelley) как замена C с явным управлением памятью, отсутствием скрытого потока управления и единым механизмом - comptime, - покрывающим дженерики, тайпклассы и метапрограммирование.
Решения в дизайне, которые встречаются постоянно
Никаких скрытых аллокаций. Функции, выделяющие память, явно принимают параметр Allocator. Это обеспечивается соглашениями и устройством стандартной библиотеки - глобальной кучи, куда можно было бы залезть, просто нет. Такой подход поощряет использование арен, где единицей владения выступает область памяти, а не отдельные объекты.
Никакого скрытого поведения (no spooky action at a distance). Никакой перегрузки операторов, никаких неявно выполняемых деструкторов (для синтаксической видимости очистки используется defer), никакой неявной диспетчеризации тайпклассов. Язык принципиально не добавляет поведение, которое читатель кода не видит в месте вызова. См. mean-free-path-language - концептуальную рамку, в которую укладывается этот подход.
Comptime вместо макросов и шаблонов. Во время компиляции выполняется тот же самый язык, что и в рантайме. Дженерики - это comptime-функции над типами. Тайпклассы - это comptime-функции, возвращающие структуру-словарь. Отдельного языка макросов нет.
IO как интерфейс. В Zig 0.16 (апрель 2026 года) стандартную библиотеку переработали так, что ввод-вывод стал интерфейсом, передаваемым через init.io наряду с аллокатором. Автор заметки zig-functional-programmers видит в этом независимое переизобретение монады Reader - явные переносчики эффектов вместо глобального рантайма.
Репозиторий и ссылки
- Компилятор и язык: https://ziglang.org
- Заметки к релизу 0.16: https://ziglang.org/download/0.16.0/release-notes.html
- Сайт Эндрю Келли: https://andrewkelley.me
Политика в отношении контрибьюторов и LLM
В Zig действует один из самых строгих запретов на вклад с помощью LLM среди крупных open source проектов: никаких issues, PR или комментариев в баг-трекере, написанных LLM, включая переводы. Логика в том, что время мейнтейнеров на ревью - это инвестиция в выращивание надёжных контрибьюторов (см. contributor-poker), а сгенерированные LLM пуллреквесты поглощают этот ресурс, не давая долгосрочной отдачи. Посты на родном языке автора приветствуются больше, чем машинные переводы с помощью LLM. Очевидная цена такого решения: форк Zig от Bun с 4-кратным ускорением компиляции не попадёт в апстрим.
Упоминания в вики
- zig-functional-programmers - программист на Haskell оценивает Zig по трём осям (выразительность доменной модели, программируемость системы типов, длина свободного пробега) и признаёт его успешным по всем трём пунктам.
- simonw-zig-anti-ai - Саймон Уиллисон о политике Zig против LLM и ситуации с форком Bun
- contributor-poker - взгляд Лориса Кро (Loris Cro) на то, почему эта политика структурно направлена на взращивание участников сообщества, а не на качество кода
- signed-vs-unsigned-sizes - Zig сохранил сишное соглашение о беззнаковом
usize; ретроспектива C3 ставит его в один ряд с C/C++/Rust, совершившими ту же ошибку - returning-to-zig - опыт разработчика, ушедшего из Zig в Rust около 2021 года и вернувшегося в 2026-м; личные впечатления от пакетного менеджера, перестановок в системе сборки 0.17 и модели безопасности ReleaseSafe. Причиной ухода из Rust называется управление проектом, а не дизайн языка, что делает заметку полезным противовесом страницам о политике проекта выше
- zig-incremental-compilation - пересборка за 50-70 мс благодаря пофайловому кэшированию ZIR, графу зависимостей единиц анализа и инкрементальному линкеру; здесь же наиболее чётко описано, какие решения в дизайне языка пришлось скорректировать, чтобы семантический анализ оставался вычислимым
- everyone-should-know-simd - пятишаговая схема повседневного SIMD от Митчелла Хашимото, реализованная через встроенные функции Zig для обобщённых векторов (
@Vector,@splat,@reduce); они избавляют от специфичного для конкретных CPU синтаксиса, сохраняя генерацию специфичного машинного кода - moonstone - среда исполнения и пакетный менеджер для Lua, написанные на Zig; один из инструментов на его базе
- whetuu - статусная строка для шелла и выбор из истории без конфигурации, использующие задачи
std.Ioдля параллельного запуска самых медленных проверок и удержания рендеринга в пределах 2 мс - allyourcodebase - организация на GitHub, упаковывающая проекты на C и C++ для системы сборки Zig с расчётом на то, что Zig заменит make, CMake, clang и Docker одной зависимостью
- tools-matter - Manganin, git-forge на Zig, ставка которого сделана на модель разрешений на основе дерева поручительств (vouch-tree), а не на привычный набор возможностей в стиле GitHub
- gingerbill-blog - Ginger Bill (создатель Odin), близкий по духу автор системного языка с акцентом на бескомпромиссные настройки по умолчанию
- Don't Take the Black Pill
- allyourcodebase
- moonstone
- tc-lang (Tig)
- whetuu
- XS (xslang)
- C3
- clankerfree (Software for Humans)
- CobaltC
- Contributor Poker
- Everyone Should Know SIMD
- Good Tools Are Invisible
- Memory Safety Absolutists
- Planned Pages
- Returning to Zig
- Signed vs Unsigned Sizes
- Zig's Anti-LLM Policy and the Bun Fork (Simon Willison)
- Tools Matter (Manganin)
- Unsigned Sizes — A Five Year Mistake in C3