Zig

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

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 как си-компилятора.

Примеры кода

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

Примечания

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.