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.

Прыклады[правіць | правіць зыходнік]

Hello world[правіць | правіць зыходнік]

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,
    };
}

Спасылкі[правіць | правіць зыходнік]