Установка Zig и первая программа
Ставим Zig, пишем первую программу и разбираем точку входа.
main — точка входа программы на Zig; компилятор сам находит публичную функцию
pub fn mainи делает её стартом исполнения.
Zig поставляется одним самодостаточным архивом: внутри и компилятор, и стандартная библиотека, и кросс-компилятор C. Скачайте бинарник с официального сайта ziglang.org или поставьте через менеджер пакетов, распакуйте и добавьте в PATH. Никакого рантайма устанавливать не нужно.
Проверяем установку
zig version
# 0.13.0
zig zen # выводит «дзен» языка — его принципы
Команда zig zen печатает манифест ценностей языка: «Communicate intent precisely», «Edge cases matter», «Favor reading code over writing code». Это не шутка — эти принципы реально пронизывают дизайн.
Первая программа
Создайте файл hello.zig:
const std = @import("std");
pub fn main() void {
std.debug.print("Привет, Zig!\n", .{});
}
Разберём строку за строкой. @import("std") — встроенная функция, которая подключает стандартную библиотеку и возвращает её как обычное значение, присвоенное константе std. Никаких #include и заголовочных файлов. pub fn main() void объявляет публичную функцию main, ничего не возвращающую. std.debug.print печатает форматную строку; второй аргумент .{} — пустой кортеж аргументов форматирования.
Сборка и запуск
zig build-exe hello.zig # собирает бинарник hello
./hello
zig run hello.zig # собрать и сразу запустить
Вывод:
Привет, Zig!
Как работает под капотом
Команда zig run компилирует исходник в нативный исполняемый файл и тут же запускает его — это удобно при разработке, но в результате получается настоящий машинный код, а не интерпретация. Фигурные скобки .{} — это анонимный структурный литерал, и Zig использует его повсюду, где нужно передать набор аргументов: форматирование, инициализация структур, опции конфигурации.
Частые ошибки
Новички забывают pub перед main — без него функция не видна как точка входа, и компилятор ругается. Другая ловушка — попытка написать print("текст") без второго аргумента: в Zig у print два параметра всегда, даже когда подставлять нечего, поэтому пишут .{}. Наконец, строки форматирования используют {} для подстановки, а буквальную фигурную скобку экранируют как {{.
Итог
- Zig ставится одним архивом — компилятор и стандартная библиотека внутри.
@import("std")подключает стандартную библиотеку как обычное значение.- Точка входа —
pub fn main; безpubпрограмма не соберётся. zig run file.zigкомпилирует и запускает;zig build-exeтолько собирает.