Язык Zig (канал)
174 subscribers
26 photos
3 videos
6 files
238 links
Download Telegram
Язык 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
Оооо блин, оказывается книгу по Zig уже делают дней 20 минимум. А Эндрю ток щас ретутнул в мастодоне :)
👍61
Язык Zig (канал)
Оооо блин, оказывается книгу по Zig уже делают дней 20 минимум. А Эндрю ток щас ретутнул в мастодоне :)
https://pedropark99.github.io/zig-book/

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)
👍71
Язык-подмножество Zig, интерпретируемый и с сборщиком мусора...

Тут сверху был Zig++, теперь у нас и Zig-- есть :)

https://github.com/sylvrs/zag

Автор стримит разработку здесь: https://www.twitch.tv/sylvrs
🔥3👍2
`compiler: implement @branchHint by mlugg`

Довольно быстро сделали, пропозал только недавно приняли, вместо @setCold и предлагаемого @expect и т.д.

#upstream
👍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

#библиотеки
👀3🔥2🤯2🐳1
Бан на одинаковое имя у поля и объявления:
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);
}
👌4🔥1👀1
Язык Zig (канал)
Плюс ещё один древний пропозал делают: Decl Literals https://github.com/ziglang/zig/issues/9938 PR https://github.com/ziglang/zig/pull/21264 #upstream
Пример с PR:
const S = struct {
x: u32,
y: u32,
fn init(val: u32) S {
return .{ .x = val + 1, .y = val + 2 };
}
};
test "call decl literal" {
const a: S = .init(100);
try std.testing.expectEqual(101, a.val.x);
try std.testing.expectEqual(102, a.val.y);
}
const std = @import("std");


``zig
const S = struct {
x: u32,
const default: S = .{ .x = 123 };
};
test "decl literal" {
const val: S = .default;
try std.testing.expectEqual(123, val.x);
}
const std = @import("std");
``


Можно считать это генерализацией enum literals (.blabla), теперь они и на объявления внутри контейнеров распространяются (константы и функции)
👍2🔥1