Простые приложения на Zig
Простые приложения на Zig
Zig — язык системного уровня без скрытого allocator: память явная, std богата. Сборка: zig build / zig run file.zig.
Как запускать примеры из главы
- Команда:
zig run имя.zig - Проверка:
zig version(0.11+).
Генератор паролей
Как запустить
- Файл:
password.zig - Команда:
zig run password.zig
const std = @import("std");
const random = std.crypto.random;
pub fn generatePassword(allocator: std.mem.Allocator, len: usize) ![]u8 {
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var buf = try allocator.alloc(u8, len);
for (buf) |*c| {
c.* = charset[random.intRangeAtMost(usize, 0, charset.len - 1)];
}
return buf;
}
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const pass = try generatePassword(gpa.allocator(), 16);
defer gpa.allocator().free(pass);
std.debug.print("{s}\n", .{pass});
}
Чтение и сортировка файла
const std = @import("std");
pub fn sortFile(allocator: std.mem.Allocator, path: []const u8) !void {
const data = try std.fs.cwd().readFileAlloc(allocator, path, 1024 * 1024);
defer allocator.free(data);
var list = std.ArrayList([]const u8).init(allocator);
defer list.deinit();
var it = std.mem.splitScalar(u8, data, '\n');
while (it.next()) |line| {
const t = std.mem.trim(u8, line, " \r");
if (t.len > 0) try list.append(t);
}
std.sort.pdq([]const u8, list.items, {}, struct {
fn lessThan(_: void, a: []const u8, b: []const u8) bool {
return std.mem.order(a, b) == .lt;
}
}.lessThan);
}
Характерный пример — 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, без исключений.
См. также: C++ — простые приложения
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История Zig - развитие языка, ключевые версии и формирование подхода к безопасному системному программированию. Основы языка Zig - принципы системного программирования, контроль ресурсов и безопасность без скрытой магии. Стандартная библиотека также содержит утилиты для работы с этапом компиляции, метапрограммирования, сериализации и отладки. Она служит не только инструментом, но и примером идиоматичного кода на Zig. Типизация, набор правил определения типа данных значений языка. Управляющие конструкции и операторы Zig - предсказуемая арифметика, контроль переполнений и ясная семантика выражений. Функции и `comptime` в Zig - выполнение вычислений на этапе компиляции и повышение надежности системного кода. Гайд по установке и настройке с написанием первой программы и её запуском.История языка Zig
Основы языка Zig
Архитектура системного программирования на Zig
Типы данных и управление памятью
Управляющие конструкции и операторы Zig
Функции и компиляция времени выполнения
Первая программа на Zig