Zig
Zig | |
---|---|
Клас мовы | працэдурная, структурная |
Тып выканання | кампілюемая |
З’явілася ў | 2016 |
Аўтар(ы) | Эндру Кэлі |
Пашырэнне файлаў | .zig, .zir |
Тыпізацыя даных | статычная |
Зведала ўплыў | C, Rust, Go |
Ліцэнзія | ліцэнзія MIT[d] |
Сайт | ziglang.org (англ.) |
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,
};
}