Экспериментальная поддержка Zig в re2c (генераторе лексера, юзается в ninja, php, т.д.), это вдобавок к C/C++/Rust.
https://github.com/skvadrik/re2c/commit/5cd48a8ffb1bfc82b17bd7f381437efd1678b188
https://github.com/skvadrik/re2c/issues/451#issuecomment-2229461380
https://github.com/skvadrik/re2c/commit/5cd48a8ffb1bfc82b17bd7f381437efd1678b188
https://github.com/skvadrik/re2c/issues/451#issuecomment-2229461380
GitHub
Add basic support for Zig (no documentation). · skvadrik/re2c@5cd48a8
Lexer generator for C, C++, Go and Rust. Contribute to skvadrik/re2c development by creating an account on GitHub.
👍3👀1
Язык 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"); },
}https://github.com/ziglang/zig/issues/20663
Планируют удалить
#upstream
Планируют удалить
usingnamespace. Полная фигня ИМХО, но я хз что туда написать, пока не собрал все мысли.#upstream
GitHub
Remove `usingnamespace` · Issue #20663 · ziglang/zig
This is a proposal to eliminate the usingnamespace keyword from the Zig programming language. I know this is a controversial one, but please read the whole thing before leaving any comments. Overvi...
🤔3
Язык 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
https://github.com/ziglang/zig/pull/20958
#upstream
🔥11
Forwarded from Leggy Flomb
🔥2🥴2
Оооо блин, оказывается книгу по Zig уже делают дней 20 минимум. А Эндрю ток щас ретутнул в мастодоне :)
👍6❤1
Язык Zig (канал)
Оооо блин, оказывается книгу по Zig уже делают дней 20 минимум. А Эндрю ток щас ретутнул в мастодоне :)
https://pedropark99.github.io/zig-book/
https://github.com/pedropark99/zig-book
https://fosstodon.org/@pedropark99/112813567441618116
Бесплатная и открытая, под CC-BY 4.0 лицензией (кратко говоря, просто авторство сохранять и упомянуть https://creativecommons.org/licenses/by/4.0/deed.ru)
https://github.com/pedropark99/zig-book
2/5
There is still a lot to be done. But the idea behind it is to be an Open Book that introduces the language by solving small projects, in a similar style to the famous "Python Chrash Course" book from Eric Matthes.
Ещё многое предстоит сделать. Но идея заключается в том, что это будет открытой книгой, которая знакомит с языком, решая небольшие проекты, в стиле знаменитой книги "Изучаем Python" от Эрика Мэтиз.
https://fosstodon.org/@pedropark99/112813567441618116
Бесплатная и открытая, под CC-BY 4.0 лицензией (кратко говоря, просто авторство сохранять и упомянуть https://creativecommons.org/licenses/by/4.0/deed.ru)
pedropark99.github.io
Introduction to Zig
👍7❤1
Язык-подмножество Zig, интерпретируемый и с сборщиком мусора...
Тут сверху был Zig++, теперь у нас и Zig-- есть :)
https://github.com/sylvrs/zag
Автор стримит разработку здесь: https://www.twitch.tv/sylvrs
Тут сверху был Zig++, теперь у нас и Zig-- есть :)
https://github.com/sylvrs/zag
Автор стримит разработку здесь: https://www.twitch.tv/sylvrs
GitHub
GitHub - sylvrs/zag: A prototype language built off the grammar and standard library of Zig
A prototype language built off the grammar and standard library of Zig - sylvrs/zag
🔥3👍2
`compiler: implement @branchHint by mlugg`
Довольно быстро сделали, пропозал только недавно приняли, вместо
#upstream
Довольно быстро сделали, пропозал только недавно приняли, вместо
@setCold и предлагаемого @expect и т.д.#upstream
GitHub
compiler: implement `@branchHint` by mlugg · Pull Request #21191 · ziglang/zig
See commit messages for details.
👍4👀1
Язык Zig (канал)
`compiler: implement @branchHint by mlugg` Довольно быстро сделали, пропозал только недавно приняли, вместо @setCold и предлагаемого @expect и т.д. #upstream
test "if branch hints" {
var t: bool = undefined;
t = true;
if (t) {
@branchHint(.likely);
} else {
@branchHint(.cold);
}
}
test "orelse branch hints" {
var x: ?u32 = undefined;
x = 123;
const val = x orelse val: {
@branchHint(.cold);
break :val 456;
};
try expect(val == 123);
}👍2👀1
Фреймворк для создания компиляторов на основе графов.
Написано, что их IR основан на работе RVSDG, а оптимизации на e-graphs + equality saturation.
https://docs.vezel.dev/graf
https://github.com/vezel-dev/graf
#библиотеки
Написано, что их IR основан на работе RVSDG, а оптимизации на e-graphs + equality saturation.
https://docs.vezel.dev/graf
https://github.com/vezel-dev/graf
#библиотеки
👀3🔥2🤯2🐳1
Язык Zig (канал)
`compiler: implement @branchHint by mlugg` Довольно быстро сделали, пропозал только недавно приняли, вместо @setCold и предлагаемого @expect и т.д. #upstream
GitHub
Implement `@branchHint` and new `@export` usage by mlugg · Pull Request #21214 · ziglang/zig
This PR is just #21206 and #21191 rebased and rolled into one, to avoid doing two separate updates to zig1.wasm.
🔥3
Бан на одинаковое имя у поля и объявления:
https://github.com/ziglang/zig/pull/21231
Если кто не знал, правила до этого были примерно такие:
* Если у enum/union есть объявление (константа/функция) и поле (тег) с одинаковым названием, то предпочитается объявление
* У struct (самого типа, а не экземпляра) такой проблемы нет, пушто нельзя поле выбирать из типа.
* Если это вызов функции у экземпляра struct (поле с указателем на функцию или объявление-метод), то предпочитается поле
Чёт тип такого:
https://github.com/ziglang/zig/pull/21231
Если кто не знал, правила до этого были примерно такие:
* Если у enum/union есть объявление (константа/функция) и поле (тег) с одинаковым названием, то предпочитается объявление
* У struct (самого типа, а не экземпляра) такой проблемы нет, пушто нельзя поле выбирать из типа.
* Если это вызов функции у экземпляра struct (поле с указателем на функцию или объявление-метод), то предпочитается поле
Чёт тип такого:
const Enum = enum {
a,
const a = 0;
};
const Struct = {
func: *const fn() void,
fn func(_: Struct) void {}
};
comptime {
_ = Enum.a; // выберется "const a = 0;"
// чтобы получить именно тег, можно вот так:
_ = @as(Enum, .a);
_ = Struct.func; // только метод понятное дело, нельзя поля так получать
var instance: Struct = .{ .func = undefined };
_ = instance.func(); // выберется "func: *const fn() void"
// чтобы получить именно метод, можно вот так:
_ = Struct.func(instance);
}GitHub
AstGen: disallow fields and decls from sharing names by mlugg · Pull Request #21231 · ziglang/zig
This is a mini-proposal which is accepted as a prerequisite for #9938. The standard library and compiler needed a few changes to obey the new rules. Most of these are a net gain for readability, I&...
👌4🔥1👀1
Язык Zig (канал)
с labeled switch было бы ещё легче, но тот PR пока не смержили, так шо вот... тут та же стратегия что и в Rust версии используется емнип, в C/C++ как раз goto-шный switch (на который похож наш будущий labeled switch), чет тип такого: state: switch (yystate)…
И опять в другом PR: https://github.com/ziglang/zig/pull/21257
GitHub
compiler: implement labeled switch/continue by mlugg · Pull Request #21257 · ziglang/zig
Implements #8220.
This is a revival of #19812.
@Luukdegram, you might want to check the Wasm changes -- I rebased your work, but haven't tested it, so the rebase could have gone wrong somew...
This is a revival of #19812.
@Luukdegram, you might want to check the Wasm changes -- I rebased your work, but haven't tested it, so the rebase could have gone wrong somew...
👀1