Zig (язык программирования)
Zig | |
---|---|
Тип исполнения | Компилируемый |
Автор | Andrew Kelley |
Расширение файлов | .zig |
Выпуск | 0.9.1 (14 февраля 2022 | )
Система типов | Статическая, строгая |
Лицензия | MIT |
Сайт | ziglang.org |
Zig — это императивный, статически типизированный, компилируемый, язык программирования общего назначения[1][2]. Язык был спроектирован для создания «надёжного, оптимального и поддерживаемого» (англ. robustness, optimality and maintainability) программного обеспечения[3][4]. Язык поддерживает обобщённое программирование и рефлексию во время компиляции, кросс-компиляцию и ручное управление памятью[5]. Главная цель языка — конкурировать c (и стать лучше) C[6][7], в то же время заимствуя некоторые идеи из Rust[8].
Язык имеет много средств для низкоуровневого программирования, особенно: упакованные структуры (структуры с нулевым выравниванием между полями), целочисленные типы произвольной длины (например: i7, i8, i63)[9], несколько типов указателей[10].
Компилятор написан на самом языке, а также на C++. LLVM 12[11] используется в качестве бэкэнда компилятора[12][13]. Компилятор лицензирован под свободной лицензией MIT[13]. Компилятор имеет возможность компилировать C и C++ программы, с помощью команд «zig cc» и «zig c++»[14]. Язык программирования Nim поддерживает использование компилятора Zig, как C компилятора.
Примеры кода
Hello World
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,
};
}
Примечания
- ↑ "Zig has all the elegant simplicity of C, minus all the ways to shoot yourself in the foot" (англ.) ?. JAXenter (31 октября 2017). Дата обращения: 20 сентября 2020. Архивировано 25 ноября 2021 года.
- ↑ Tired of C? New programming language Zig aims to be more pragmatic and readable (англ.) ?. JAXenter (19 октября 2017). Дата обращения: 20 сентября 2020. Архивировано 25 ноября 2021 года.
- ↑ Serdar Yegulalp. New challenger joins Rust to topple C language (англ.). InfoWorld (29 августа 2016). Дата обращения: 20 сентября 2020. Архивировано 25 ноября 2021 года.
- ↑ IT之家. 想替代 C 的 Zig 语言成立了基金会 . tech.sina.com.cn (12 июля 2020). Дата обращения: 20 сентября 2020. Архивировано 25 ноября 2021 года.
- ↑ The Zig Programming Language . ziglang.org. Дата обращения: 21 сентября 2020. Архивировано 1 апреля 2022 года.
- ↑ Mozilla’s Observatory, the Zig programming language, and uSens’ VR/AR SDK—SD Times news digest: Aug. 29, 2016 (англ.) ?. SD Times (29 августа 2016). Дата обращения: 21 сентября 2020. Архивировано 25 ноября 2021 года.
- ↑ The Zig Programming Language . ziglang.org. Дата обращения: 21 сентября 2020. Архивировано 1 апреля 2022 года.
- ↑ Unsafe Zig is Safer Than Unsafe Rust - Andrew Kelley . andrewkelley.me. Дата обращения: 21 сентября 2020. Архивировано 21 февраля 2022 года.
- ↑ Keen to go _ExtInt? LLVM Clang compiler adds support for custom width integers (англ.). www.theregister.com. Дата обращения: 21 сентября 2020. Архивировано 26 октября 2020 года.
- ↑ Documentation - The Zig Programming Language . ziglang.org. Дата обращения: 21 сентября 2020. Архивировано 31 марта 2022 года.
- ↑ SD Times news digest: C++20 concepts in Visual Studio 2010 version 16.3, Bootstrap to drop IE support, and Zig 0.60 released (англ.) ?. SD Times (14 апреля 2020). Дата обращения: 21 сентября 2020. Архивировано 25 ноября 2021 года.
- ↑ A Reply to _The Road to Zig 1.0_ (неопр.). www.gingerbill.org (13 мая 2019). Дата обращения: 21 сентября 2020. Архивировано 7 сентября 2021 года.
- ↑ 13,0 13,1 ziglang/zig. — 2020-09-21. Архивировано 30 марта 2022 года.
- ↑ 0.6.0 Release Notes · The Zig Programming Language . ziglang.org. Дата обращения: 21 сентября 2020. Архивировано 21 февраля 2022 года.