Перейти к основному содержимому

Простые приложения на Zig

Разработчику Архитектору

Простые приложения на Zig

Zig — язык системного уровня без скрытого allocator: память явная, std богата. Сборка: zig build / zig run file.zig.

Стартовать лучше с небольших инструментов: CLI-утилит, обработки файлов и минимальных сетевых сценариев. В таких задачах хорошо видно сильные стороны Zig:

  • явная модель памяти;
  • предсказуемая обработка ошибок через !T, try, catch;
  • минимальные зависимости для сборки и запуска.

Как запускать примеры из главы

  1. Команда: zig run имя.zig
  2. Проверка: zig version (0.11+).
  3. Режим разработки: для безопасного старта используйте -O Debug.
  4. Проверка форматирования: 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.
  • Ввод пользователя валидируется, а не используется "как есть".

Связанные статьи энциклопедии