Лучшие вопросы
Таймлайн
Чат
Перспективы

Zig

Язык программирования общего назначения и набор инструментов для создания кода Из Википедии, свободной энциклопедии

Zig
Remove ads

Zig — императивный, статически типизированный, компилируемый язык программирования общего назначения. Язык был спроектирован для «создания надёжного, оптимального и переиспользуемого ПО» (англ. maintaining robust, optimal and reusable software). Поддерживает обобщённое программирование и рефлексию во время компиляции, кросс-компиляцию и ручное управление памятью[англ.]. Главная цель языка — быть более удобным, чем Си в задачах системного программирования, и в то же время быть более простым, чем C++ и Rust. Разработка Zig поддерживается некоммерческой организацией Zig Software Foundation, основанной в 2020 году автором языка Эндрю Келли.

Краткие факты Класс языка, Тип исполнения ...

Язык имеет много средств для низкоуровневого программирования, среди таковых: упакованные структуры (структуры с нулевым выравниванием между полями), целочисленные типы произвольной длины (вплоть до 65535 бит), несколько типов указателей.

На момент версии 0.10.0 Zig по умолчанию использует новый компилятор, написанный на самом языке Zig, однако временно остаётся возможность использовать старый компилятор на C++. В качестве основного бэкэнда компилятора используется LLVM, однако существуют другие бэкенды разной готовности. Компилятор лицензирован под свободной лицензией MIT. Компилятор имеет возможность компилировать программы на Си и C++ с помощью команд zig cc и zig c++. Язык программирования Nim поддерживает использование компилятора Zig как си-компилятора.

Remove ads

Примеры кода

Hello World:

const std = @import("std");

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();
    try stdout.print("Hello, {s}!\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,
    };
}
Remove ads

Примечания

Ссылки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads