Zig — императивный, статически типизированный, компилируемый язык программирования общего назначения. Язык был спроектирован для «создания надёжного, оптимального и переиспользуемого ПО» (англ. maintaining robust, optimal and reusable software). Поддерживает обобщённое программирование и рефлексию во время компиляции, кросс-компиляцию и ручное управление памятью[англ.]. Главная цель языка — быть более удобным, чем Си в задачах системного программирования, и в то же время быть более простым, чем C++ и Rust. Разработка Zig поддерживается некоммерческой организацией Zig Software Foundation, основанной в 2020 году автором языка Эндрю Келли.
Язык имеет много средств для низкоуровневого программирования, среди таковых: упакованные структуры (структуры с нулевым выравниванием между полями), целочисленные типы произвольной длины (вплоть до 65535 бит), несколько типов указателей.
На момент версии 0.10.0 Zig по умолчанию использует новый компилятор, написанный на самом языке Zig, однако временно остаётся возможность использовать старый компилятор на C++. В качестве основного бэкэнда компилятора используется LLVM, однако существуют другие бэкенды разной готовности. Компилятор лицензирован под свободной лицензией MIT. Компилятор имеет возможность компилировать программы на Си и C++ с помощью команд zig cc и zig c++. Язык программирования Nim поддерживает использование компилятора Zig как си-компилятора.
Примеры кода
const std = @import("std");
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
try stdout.print("Hello, {s}!\n", .{"world"});
}
Обобщённый связный список:
fn LinkedList(comptime T: type) type {
return struct {
pub const Node = struct {
prev: ?*Node,
next: ?*Node,
data: T,
};
first: ?*Node,
last: ?*Node,
len: usize,
};
}
pub fn main() void {
var node = LinkedList(i32).Node {
.prev = null,
.next = null,
.data = 1234,
};
var list = LinkedList(i32) {
.first = &node,
.last = &node,
.len = 1,
};
}
Примечания
- ↑ Release 0.13.0
- ↑ Келли Э. init — 2015.
Ссылки
- ziglang.org — официальный сайт Zig
- Проект Zig на сайте GitHub
You must be logged in to post a comment.