Язык Zig (канал) – Telegram
Язык Zig (канал)
180 subscribers
28 photos
3 videos
6 files
246 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
I really like this syntax for initialization, and I think it's a consistent extension of the var x: T = .{} syntax. With the current pattern,
const value = package.SomeType.init(4);

The reader does not necessarily know that the type of value is package.SomeType. This is usually true by convention, but careful readers and editor tools cannot know for sure. In contrast, with the new syntax:
const value: package.SomeType = .init(4);

The reader and tools now know for sure that value must be of type package.SomeType. This syntax conveys extra information, and is consistent with a preference for x: T = .{} over x = T{}.
👍2