⚡ Zig
Системный язык без скрытого управления: типы, comptime, ошибки, сборка.
Шпаргалки · Программирование · #zig #systems
IDE и запуск
VS Code + расширение Zig + ZLS. zig run main.zig, zig build, zig build test, zig init. Zig также умеет компилировать C (zig cc).
Типы данных
const n: i32 = 1; // const неизменяемо, var изменяемо
var x: u8 = 255; const f: f64 = 1.5; const b: bool = true;
const s: []const u8 = "строка";
const arr = [_]i32{ 1, 2, 3 };
const o: ?i32 = null; // опциональный
const e: anyerror!i32 = 1; // тип с ошибкой
const P = struct { x: i32, y: i32 };
Целые любой ширины: u3, i128, usize.
Операторы
+ - * / %, == != < >, and or ! (словами), orelse (для ?T), catch (для ошибок), try, +% (с переполнением по модулю), +| (с насыщением).
Циклы
for (arr, 0..) |v, i| { _ = v; _ = i; }
var i: usize = 0;
while (i < 3) : (i += 1) {}
Функции
fn add(a: i32, b: i32) i32 { return a + b; }
fn maybe(x: i32) !i32 { if (x < 0) return error.Negative; return x; }
const r = try maybe(5);
defer file.close(); // выполнится при выходе из блока
Встроенные
@import, @sizeOf, @intCast, @as, @TypeOf, @panic, std.debug.print, std.mem, std.ArrayList, std.testing.expect.
comptime
Код выполняется на этапе компиляции: comptime var, дженерики как функции над типами.
fn max(comptime T: type, a: T, b: T) T { return if (a > b) a else b; }
Коллекции и память
Память выделяется явно через аллокаторы: std.heap.page_allocator, GeneralPurposeAllocator, ArenaAllocator. Коллекции: std.ArrayList(T), std.AutoHashMap(K, V).
Где применяют
Системные утилиты, игры, встраиваемые устройства, замена C-тулчейна (Bun, Tigerbeetle).