Zig - імператыўная, статычна-тыпаваная, кампілюемая сістэмная мова праграмавання агульнага прызначэння, распрацаваная Эндру Кэлі. Мова распрацавана для “надзейнасці, аптымальнасці і простасці абслугоўвання коду”, падтрымлівае джынэрыкі і рэфлексію падчас кампіляцыі, крос-кампіляцыю і кіраванне памяццю ўручную. Асноўная мэта мовы - канкурыраваць (і ўдасканальваць) C, у той жа час беручы натхненне з мовы Rust.
Zig мае мноства функцый для праграмавання на нізкім узроўні, у прыватнасці: насычаныя структуры (структуры з нулявым водступамі паміж палямі), цэлалікавы тып вольнага памеру і некалькі тыпаў указальнікаў.
Кампілятар напісаны на Zig і C++, з выкарыстаннем LLVM 11 у якасці бэкэнда, такім чынам падтрымлівае ўсе тыя ж платформы, што і LLVM. Кампілятар - гэта бясплатнае праграмнае забеспячэнне з адкрытым зыходным кодам паводле ліцэнзіі MIT. Кампілятар Zig прадастаўляе магчымасць кампіляцыі C і C++, аналагічна Clang, з дапамогай каманд zig cc і zig c++, адпаведна. Мова праграмавання Nim падтрымлівае выкарыстанне zig cc у якасці кампілятара C.
const std = @import("std");
pub fn main() !void \{
const stdout = std.io.getStdOut().writer();
try stdout.print("Hello, \{\}!\n", .\{"world"\});
\}
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,
\};
\}
fn LinkedList(comptime T: type) type \{
return struct \{
pub const Node = struct \{
prev: ?\*Node,
next: ?\*Node,
data: T,
\};
first: ?\*Node,
last: ?\*Node,
len: usize,
\};
\}