Кому и зачем Zig: применение в реальном мире
После курса столярного дела хочется сразу построить дом. Но первая полезная работа часто скромнее: полка, у которой понятны размеры, нагрузка и способ крепления. Она позволяет проверить весь путь от замысла до результата. Первая программа на Zig тоже должна быть маленькой, но завершённой.
Выберем обработчик чисел: читает байты, выделяет нужные результаты, отдаёт их владельцу и проверяется тестами. Затем разберём, как из этого перейти к более глубокому системному разделу.
Одна мысль урока
Завершённая задача соединяет явные договоры данных, ошибок, памяти, тестов и сборки.
Опора из прошлого урока: Zig против C, Rust и C++.
От картинки к записи
Zig подходит, когда важно контролировать представление данных, память и связь с системными библиотеками. Это могут быть инструменты командной строки, встроенные компоненты, обработка двоичных форматов, библиотеки для других программ. Инструмент командной строки не обязан иметь графическое окно, но обязан понятно сообщать о неуспехе.
Первый проект не должен одновременно вводить сеть, потоки, интерфейс и неизвестный формат файла. Выбери один вход и один выход. Например, функция получает список измерений и возвращает отдельную копию положительных. Вход заимствован, выход принадлежит вызывающему, нехватка памяти передаётся ошибкой. Это уже настоящий договор, а не демонстрация без ответственности.
В нашем финальном примере используются ArrayList 0.16, явный аллокатор и errdefer. Пока результат не передан наружу, список владеет своим хранилищем. Если append или toOwnedSlice вернут ошибку, errdefer уберёт накопленное. При успехе toOwnedSlice передаёт самостоятельный срез, который позже освобождает вызывающий.
Передача владения
не копирует ответственность автоматически на всех читателей. Если ты сохранишь ещё один срез на тот же результат, он не становится вторым независимым блоком. Уборку по-прежнему выполняют один раз, после завершения всех допустимых чтений.
Проверим порядок результатов, отсутствие изменения входа и пустой результат. Числа сохраняют порядок, в котором встретились: это обещание последовательного списка. Карта здесь не нужна, потому что задача не ищет значения по ключу. Условие строго больше нуля, поэтому ноль не попадает в результат.
Для реального запуска вокруг функции появится чтение входа и вывод. Там нужно выбрать формат, правила ошибок и ограничения размера. Не обещаем, что текущий листинг уже читает файл. Он завершает вычислительную часть; подключение нового внешнего источника требует отдельного явно описанного проекта.
После основ можно идти в 32-systems/01 · путь hello. Там изучают машинное представление и путь исполняемого файла подробнее, темп выше, а уровень уроков M. У раздела сохраняются собственные предварительные требования по устройству памяти и дополнительному коду чисел: завершение B16 не отменяет их. Открой карточку первого урока и пройди нужные CS-темы, если они ещё не знакомы.
Не нужно переписывать все 28 упражнений в один гигантский файл. Сохрани несколько небольших полезных функций с тестами и понятными сигнатурами. Для обновления Zig сначала проверь эти реальные вызовы, затем API сборки и ввода-вывода. Так переход на новую версию опирается на наблюдения, а не на общую надежду, что ничего не поменялось.
Ты уже умеешь задавать правильные вопросы к примеру: что хранится в типе, какие пути ошибочны, кто владеет памятью, какой инструмент это проверяет. Эти вопросы важнее запоминания названий всех модулей стандартной библиотеки.
премиум-урок
Продолжение в премиуме: 1 200 ₽ в месяц или 10 000 ₽ в год. Вместе с ним серверные проверки задач и школьные токены AI-коуча.
Оплата пока не подключена: премиум и курсы открываются промокодом.