Zig — это императивный, статически типизированный, компилируемый, язык программирования общего назначения[2][3]. Язык был спроектирован для создания «надёжного, оптимального и поддерживаемого» (англ. robustness, optimality and maintainability) программного обеспечения[4][5]. Язык поддерживает обобщённое программирование и рефлексию во время компиляции, кросс-компиляцию и ручное управление памятью[6]. Главная цель языка — конкурировать c (и стать лучше) C[7][8], в то же время заимствуя некоторые идеи из Rust[9].
Zig | |
---|---|
![]() | |
Класс языка | язык программирования, императивный язык программирования, язык программирования общего назначения[d], компилируемый язык программирования, язык системного программирования[d], мультипарадигмальный язык программирования, процедурный язык программирования и язык функционального программирования |
Тип исполнения | Компилируемый |
Появился в | 2015[1] |
Автор | Andrew Kelley |
Разработчик | Andrew Kelley[d] |
Расширение файлов |
.zig |
Выпуск | 0.9.1 (14 февраля 2022; 3 месяца назад (2022-02-14)) |
Система типов | Статическая, строгая |
Испытал влияние | Си, C++, Go, Rust и JavaScript |
Лицензия | MIT |
Сайт | ziglang.org |
![]() |
Язык имеет много средств для низкоуровневого программирования, особенно: упакованные структуры (структуры с нулевым выравниванием между полями), целочисленные типы произвольной длины (например: i7, i8, i63)[10], несколько типов указателей[11].
Компилятор написан на самом языке, а также на C++. LLVM 12[12] используется в качестве бэкэнда компилятора[13][14]. Компилятор лицензирован под свободной лицензией MIT[14]. Компилятор имеет возможность компилировать C и C++ программы, с помощью команд «zig cc» и «zig c++»[15]. Язык программирования Nim поддерживает использование компилятора Zig, как C компилятора.
const std = @import("std");
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
try stdout.print("Hello, {}!\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,
};
}
![]() Языки программирования | |
---|---|
| |
|