EnglishРусский Map

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 - явные переносчики эффектов вместо глобального рантайма.

Репозиторий и ссылки

Политика в отношении контрибьюторов и 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), близкий по духу автор системного языка с акцентом на бескомпромиссные настройки по умолчанию
Sub-pages