Zig (язык программирования) (Zig (x[dt hjkijgbbnjkfgunx))

Перейти к навигации Перейти к поиску
Zig
Изображение логотипа
Класс языка язык программирования, императивный язык программирования, язык программирования общего назначения[d], компилируемый язык программирования, язык системного программирования[d], мультипарадигмальный язык программирования, процедурный язык программирования и язык функционального программирования
Тип исполнения Компилируемый
Появился в 2015[2]
Разработчик Эндрю Келли[d]
Расширение файлов .zig
Выпуск
Испытал влияние Си, C++, Go, Rust и JavaScript
Лицензия лицензия MIT
Сайт ziglang.org (англ.)
Логотип Викисклада Медиафайлы на Викискладе

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

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

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

Примеры кода[править | править код]

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

Примечания[править | править код]

  1. Release 0.12.0
  2. Келли Э. init — 2015.
  3. Главная ⚡ Zig Programming Language. ziglang.org. Дата обращения: 29 декабря 2022. Архивировано 29 декабря 2022 года.
  4. Подробный обзор ⚡ Zig Programming Language. ziglang.org. Дата обращения: 29 декабря 2022. Архивировано 29 декабря 2022 года.
  5. Announcing the Zig Software Foundation ⚡ Zig Programming Language. ziglang.org. Дата обращения: 29 декабря 2022. Архивировано 15 ноября 2021 года.
  6. Поддержать ZSF ⚡ Zig Programming Language. ziglang.org. Дата обращения: 29 декабря 2022. Архивировано 29 декабря 2022 года.
  7. Documentation - The Zig Programming Language. ziglang.org. Дата обращения: 21 сентября 2020. Архивировано 31 марта 2022 года.
  8. 0.10.0 Release Notes ⚡ The Zig Programming Language. ziglang.org. Дата обращения: 29 декабря 2022. Архивировано 25 декабря 2022 года.
  9. Zig Is Self-Hosted Now, What's Next? (англ.). kristoff.it. Дата обращения: 29 декабря 2022. Архивировано 11 января 2023 года.
  10. Zig's New Relationship with LLVM (англ.). kristoff.it. Дата обращения: 29 декабря 2022. Архивировано 29 декабря 2022 года.
  11. ziglang/zig. — 2020-09-21. Архивировано 30 марта 2022 года.
  12. `zig cc`: a Powerful Drop-In Replacement for GCC/Clang - Andrew Kelley. andrewkelley.me. Дата обращения: 29 декабря 2022. Архивировано 17 марта 2022 года.

Ссылки[править | править код]