Простые приложения на Zig
Простые приложения на Zig
Zig — язык системного уровня без скрытого allocator: память явная, std богата. Сборка: zig build / zig run file.zig.
Стартовать лучше с небольших инструментов: CLI-утилит, обработки файлов и минимальных сетевых сценариев. В таких задачах хорошо видно сильные стороны Zig:
- явная модель памяти;
- предсказуемая обработка ошибок через
!T,try,catch; - минимальные зависимости для сборки и запуска.
Как запускать примеры из главы
- Команда:
zig run имя.zig - Проверка:
zig version(0.11+). - Режим разработки: для безопасного старта используйте
-O Debug. - Проверка форматирования:
zig fmt имя.zig.
Генератор паролей
Как запустить
- Файл:
password.zig - Команда:
zig run password.zig
Этот пример показывает базовый шаблон для большинства реальных программ на Zig:
- функция получает
allocator; - выделяет буфер;
- заполняет его;
- возвращает владение вызывающему коду.
Код ITЗагрузка примера кода…
Что важно в примере:
generatePasswordне прячет источник памяти — аллокатор передают явно.- освобождение происходит там, где память больше не нужна (
free(pass)). - генератор случайных чисел берётся из
std.crypto.random, без внешней библиотеки.
Идеи для расширения:
- добавьте флаг длины через аргументы CLI;
- разделите наборы символов (только цифры, только ASCII, полный режим);
- запретите неоднозначные символы (
0/O,l/I) для удобства пользователя.
Чтение и сортировка файла
Сценарий
Утилита читает текстовый файл, убирает пустые строки и сортирует записи. Такой шаблон полезен для логов, списков доменов, словарей и конфигов.
Код ITЗагрузка примера кода…
Практические замечания:
readFileAllocполучает лимит размера файла — это защита от случайного чтения гигабайтового файла.trimочищает пробелы и\r, чтобы одинаковые строки не расходились из-за конца строки Windows/Linux.- при больших объёмах данных полезно перейти на потоковую обработку (
reader) вместо загрузки всего файла в память.
Характерный пример — try и явный allocator
const std = @import("std");
pub fn parsePort(s: []const u8) !u16 {
const value = try std.fmt.parseInt(u16, s, 10);
if (value == 0) return error.InvalidPort;
return value;
}
Ошибки — значения типа error, без исключений.
Мини-проект — калькулятор аргументов CLI
Ещё один типичный сценарий для новичка в Zig: утилита получает числа через аргументы и считает сумму.
Код ITЗагрузка примера кода…
Чем полезен пример:
- отрабатывает паттерн
argsAlloc/argsFree; - закрепляет
tryв цикле; - показывает, как строить полезные CLI-инструменты без фреймворков.
Чек-лист качества для простых приложений Zig
- Все функции, которые выделяют память, принимают
allocator. - Для каждого
allocесть симметричныйfreeилиdeinit. - Ошибки не игнорируются; каждый
!Tобработан черезtry/catch. - Форматирование и тесты запускаются перед коммитом:
zig fmt,zig test. - Ввод пользователя валидируется, а не используется "как есть".
Связанные статьи энциклопедии
- Первая программа на Zig — базовый старт и настройка окружения.
- Основы языка Zig — ключевые механики языка перед практикой.
- Функции и comptime — как строить переиспользуемые API.
- C++ — простые приложения — сравнение прикладных подходов.