Язык Zig (канал)
174 subscribers
26 photos
3 videos
6 files
239 links
Download Telegram
Как новый std.Progress будет выглядеть в режиме дерева (как у zig build --summary all):

https://asciinema.org/a/gDna9RnicwYjDRIDn4e07NFSc

#upstream
Неофициальная неполная таблица от matu3ba с функциями из compiler_rt для разных архитектур, плюс галочка реализовано или нет в Zig.

Если у вас во время компиляции появилась ошибка по типу:
ld.lld: error: undefined symbol: _bla_bla

То скорее всего эту функцию ещё не портировали на Zig, можете свериться с таблицей.

https://github.com/matu3ba/zig_unofficial_compiler_rt_docs
Ещё одна библиотека для корутин и асинхронного I/O (на этот раз два-в-одном, а не раздельно как с zigcoro + libxev):
https://cloudef.github.io/zig-aio
https://github.com/Cloudef/zig-aio

#библиотеки
https://ziggy-lang.io/
https://github.com/kristoff-it/ziggy

Ещё одна (если считать ZON) зигоподобная альтернатива JSON/YAML/TOML/т.д. . В отличии от ZON, синтаксис вдохновлен Зиг, но не копирует его (поэтому есть прикольные новые фичи, которых не в Zig и ZON):
.id = @uuid("..."),
.time = 1710085168,
.payload = Command {
.do = @action("clear_chat"),
.sender = "kristoff-it",
.roles = ["admin", "mod"],
.extra = {
"agent": "Mozilla/5.0",
"os": "Linux/x64",
},
}
👀4🔥2
Язык Zig (канал)
Экспериментальная поддержка Zig в re2c (генераторе лексера, юзается в ninja, php, т.д.), это вдобавок к C/C++/Rust. https://github.com/skvadrik/re2c/commit/5cd48a8ffb1bfc82b17bd7f381437efd1678b188 https://github.com/skvadrik/re2c/issues/451#issuecomment-2229461380
Пример:

// re2zig $INPUT -o $OUTPUT

const std = @import("std");

fn lex(yyinput: [:0]const u8) bool {
var yycursor: u32 = 0;
/*!re2c
re2c:define:YYCTYPE = u8;
re2c:yyfill:enable = 0;

number = [1-9][0-9]*;

number { return true; }
* { return false; }
*/
}

test {
try std.testing.expect(lex("1234"));
}

Конвертируется в:
// Generated by re2c
// re2zig $INPUT -o $OUTPUT

const std = @import("std");

fn lex(yyinput: [:0]const u8) bool {
var yycursor: u32 = 0;

var yych: u8 = 0;
var yystate: u32 = 0;
while (true) {
switch (yystate) {
0 => {
yych = yyinput[yycursor];
yycursor += 1;
switch (yych) {
0x31...0x39 => {
yystate = 2;
continue;
},
else => {
yystate = 1;
continue;
},
}
},
1 => { return false; },
2 => {
yych = yyinput[yycursor];
switch (yych) {
0x30...0x39 => {
yycursor += 1;
yystate = 2;
continue;
},
else => {
yystate = 3;
continue;
},
}
},
3 => { return true; },
else => { @panic("internal lexer error"); },
}
}

}

test {
try std.testing.expect(lex("1234"));
}
👍1
Язык Zig (канал)
Пример: // re2zig $INPUT -o $OUTPUT const std = @import("std"); fn lex(yyinput: [:0]const u8) bool { var yycursor: u32 = 0; /*!re2c re2c:define:YYCTYPE = u8; re2c:yyfill:enable = 0; number = [1-9][0-9]*; number…
с labeled switch было бы ещё легче, но тот PR пока не смержили, так шо вот... тут та же стратегия что и в Rust версии используется емнип, в C/C++ как раз goto-шный switch (на который похож наш будущий labeled switch), чет тип такого:
state: switch (yystate) {
    0 => {
        yych = yyinput[yycursor];
        yycursor += 1;
        switch (yych) {
            '1'...'9' => continue :state 2,
            else => continue :state 1
        }
    },
    1 => { return false; },
    2 => {
        yych = yyinput[yycursor];
        switch (yych) {
            '0'...'9' => {
                yycursor += 1;
                continue :state 2;
            },
            else => continue :state 3,
        }
    },
    3 => { return true; },
    else => { @panic("internal lexer error"); },
}
Язык Zig (канал)
https://github.com/ziglang/zig/issues/20663 Планируют удалить usingnamespace. Полная фигня ИМХО, но я хз что туда написать, пока не собрал все мысли. #upstream
У нас и так нет способа создать структуру/перечисления/т.д. с нужными объявлениями в комптайме (если в @Type поле .decls будет не пустое, компилятор ошибку выдаст), а без usingnamespace вообще придется каждую такую генерируемую декларацию дублировать. Плюс у нас нет способа легко создать анонимные функции, так шо будет куча внутренных структур с чисто одной функцией, полная туфта короче.
Язык Zig (канал)
У нас и так нет способа создать структуру/перечисления/т.д. с нужными объявлениями в комптайме (если в @Type поле .decls будет не пустое, компилятор ошибку выдаст), а без usingnamespace вообще придется каждую такую генерируемую декларацию дублировать. Плюс…
Короче, я пока что просто кину ссылку на zalgebra и zig-libgccjit, не представляю как там можно сделать "хотя бы не хуже" без usingnamespace, надеюсь не заигнорят (особенно zalgebra, пушто в zig-libgccjit можно сделать без usingnamespace, но читаемость и качество ошибок компиляции очень пострадает)
Веб-интерфейс для fuzz-тестинга. Помимо прочего показывает рабочее покрытие кода (в красных точках код не достигался, в зелёных — достигался)

https://github.com/ziglang/zig/pull/20958
#upstream
🔥11
Forwarded from Leggy Flomb
🔥2🥴2