Zig — императивный, статически типизированный, компилируемый язык программирования общего назначения. Язык был спроектирован для «создания надёжного, оптимального и переиспользуемого ПО» (англ. maintaining robust, optimal and reusable software)[3]. Язык поддерживает обобщённое программирование и рефлексию во время компиляции, кросс-компиляцию и ручное управление памятью[англ.]. Главная цель языка — конкурировать c (и стать лучше) C, и в то же время быть более простым, чем C++, Rust и другие[4]. Разработка Zig поддерживается некоммерческой организацией Zig Software Foundation, основанная в 2020 году автором языка Andrew Kelley[5][6].
Zig | |
---|---|
Класс языка | язык программирования, императивный, язык программирования общего назначения[вд], компилируемый язык программирования, язык системного программирования[вд], мультипарадигмальный, процедурный язык программирования и язык функционального программирования |
Тип исполнения | Компилируемый |
Появился в | 2015[1] |
Разработчик | Эндрю Келли[вд] |
Расширение файлов |
.zig |
Выпуск | |
Испытал влияние | Си, C++, Go, Rust и JavaScript |
Лицензия | лицензия MIT |
Сайт | ziglang.org (англ.) |
Медиафайлы на Викискладе |
Язык имеет много средств для низкоуровневого программирования, особенно: упакованные структуры (структуры с нулевым выравниванием между полями), целочисленные типы произвольной длины (вплоть до 65535 бит), несколько типов указателей[7].
На момент версии 0.10.0 Zig по умолчанию использует новый компилятор, написанный на самом языке Zig, однако временно остаётся возможность использовать старый компилятор на C++[8][9]. В качестве основного бэкэнда компилятора используется LLVM, однако существуют другие бэкенды разной готовности[10]. Компилятор лицензирован под свободной лицензией MIT[11]. Компилятор имеет возможность компилировать C и C++ программы с помощью команд «zig cc» и «zig c++»[12]. Язык программирования Nim поддерживает использование компилятора Zig как C компилятора.
Примеры кода
Hello World
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,
};
}
Примечания
Ссылки
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.