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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Zig
Изображение логотипа
Класс языка язык программирования, императивный язык программирования, язык программирования общего назначения[d], компилируемый язык программирования, язык системного программирования[d], мультипарадигмальный язык программирования, процедурный язык программирования и язык функционального программирования
Тип исполнения Компилируемый
Появился в 2015[1]
Автор Andrew Kelley
Разработчик Andrew Kelley[d]
Расширение файлов .zig
Выпуск 0.9.1 (14 февраля 2022; 3 месяца назад (2022-02-14))
Система типов Статическая, строгая
Испытал влияние Си, C++, Go, Rust и JavaScript
Лицензия MIT
Сайт ziglang.org
Логотип Викисклада Медиафайлы на Викискладе

Zig — это императивный, статически типизированный, компилируемый, язык программирования общего назначения[2][3]. Язык был спроектирован для создания «надёжного, оптимального и поддерживаемого» (англ. robustness, optimality and maintainability) программного обеспечения[4][5]. Язык поддерживает обобщённое программирование и рефлексию во время компиляции, кросс-компиляцию и ручное управление памятью[6]. Главная цель языка — конкурировать c (и стать лучше) C[7][8], в то же время заимствуя некоторые идеи из Rust[9].

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

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

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

Hello World[править | править код]

const std = @import("std");

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();
    try stdout.print("Hello, {}!\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. Kelley A. init — 2015.
  2. "Zig has all the elegant simplicity of C, minus all the ways to shoot yourself in the foot" (англ.) ?. JAXenter (31 октября 2017). Дата обращения: 20 сентября 2020.
  3. Tired of C? New programming language Zig aims to be more pragmatic and readable (англ.) ?. JAXenter (19 октября 2017). Дата обращения: 20 сентября 2020.
  4. Serdar Yegulalp. New challenger joins Rust to topple C language (англ.). InfoWorld (29 августа 2016). Дата обращения: 20 сентября 2020.
  5. IT之家. 想替代 C 的 Zig 语言成立了基金会. tech.sina.com.cn (12 июля 2020). Дата обращения: 20 сентября 2020.
  6. The Zig Programming Language. ziglang.org. Дата обращения: 21 сентября 2020.
  7. Mozilla’s Observatory, the Zig programming language, and uSens’ VR/AR SDK—SD Times news digest: Aug. 29, 2016 (англ.) ?. SD Times (29 августа 2016). Дата обращения: 21 сентября 2020.
  8. The Zig Programming Language. ziglang.org. Дата обращения: 21 сентября 2020.
  9. Unsafe Zig is Safer Than Unsafe Rust - Andrew Kelley. andrewkelley.me. Дата обращения: 21 сентября 2020.
  10. Keen to go _ExtInt? LLVM Clang compiler adds support for custom width integers (англ.). www.theregister.com. Дата обращения: 21 сентября 2020.
  11. Documentation - The Zig Programming Language. ziglang.org. Дата обращения: 21 сентября 2020.
  12. SD Times news digest: C++20 concepts in Visual Studio 2010 version 16.3, Bootstrap to drop IE support, and Zig 0.60 released (англ.) ?. SD Times (14 апреля 2020). Дата обращения: 21 сентября 2020.
  13. A Reply to _The Road to Zig 1.0_ (англ.) ?. www.gingerbill.org (13 мая 2019). Дата обращения: 21 сентября 2020.
  14. 1 2 ziglang/zig. — 2020-09-21.
  15. 0.6.0 Release Notes · The Zig Programming Language. ziglang.org. Дата обращения: 21 сентября 2020.

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