Язык Zig (канал) – Telegram
Язык Zig (канал)
181 subscribers
28 photos
3 videos
6 files
246 links
Download Telegram
Язык Zig (канал)
https://github.com/ziglang/zig/pull/19459 Черновой запрос на слияние, добавляющий поддержку синтаксиса "labeled continue inside a switch", т.е. computed goto (таблицы переходов). Пример кода (немного упрощено, с новых тестов): const std = @import("std");…
Для понимания можно ещё проще пример сделать:

const bit: u1 = 0;

label: switch (bit) {
0 => continue :label 1,
1 => continue :label 0,
}
Тут получился обычный бесконечный цикл, где switch скачет от 0 до 1 и обратно.

Автор планирует добавить поддержку чисел, булевых значений, перечислений (enum) и помеченных объединений (tagged union), но не знает, нужно ли поддерживать error values.
Язык Zig (канал)
https://github.com/ziglang/zig/pull/19459 Черновой запрос на слияние, добавляющий поддержку синтаксиса "labeled continue inside a switch", т.е. computed goto (таблицы переходов). Пример кода (немного упрощено, с новых тестов): const std = @import("std");…
Чем это отличается от обычного:

var tag: Tag = .a;
const result = brk: while (true) switch (tag) {
.a => {
tag = c;
continue :brk;
},
.b => break :brk false,
.c => {
tag = b;
continue :brk;
},
};
В варианте с while-switch таблицы переходов может и не появиться, нет гарантий, это зависит от оптимизатора.
А в варианте с labeled continue она будет гарантированно создана во всех режимах сборки (в том числе Debug).

Ну и размер самой таблице зависит от того, какой тип принимает switch, т.е. в u8 или enum(u8) может быть до 255 вхождений, а в u16 уже 65 535.

Это всё включено в размер сгенерированного кода, поэтому при необдуманном пользовании бинарник может сильно распухнуть (ну как я понял), а при обдуманном хорошо так поднять производительность.
🔥2👍1
Я тут пока лазил в кишках компилятора (с @field химичу), заметил одну вещь: пропускать указатель (т.е. писать "ab.cc" вместо "ab.*.cc") можно не только в полях, но и в декларациях (типы добавил для наглядности)

const std: type = @import("std");
const std_ref: *const type = &std;

test {
_ = std_ref.ArrayList(u8).init(std_ref.testing.allocator);
}

ZLS при этом молчит (ломается походу) и не даёт автокомплит для std_ref.
👍5
gavr
https://youtu.be/NAOOGB1q6uQ
Тот самый Алекс Кладов ака matklad акак один из разрабов rust-analyzer, TigerBeetle и т.д., чьи посты иногда тут репостятся)
👍10👎1
Язык Zig (канал)
0.11.0 тудум тудум 🥳🥳 #upstream
Выпуск Zig 0.12.0 🎉🎉🎉
И снова жирнющий релиз получился
https://ziglang.org/download/0.12.0/release-notes.html

#upstream

p.s. странно, что стрима не было
🔥13👎1
Эндрю планирует выпустить 0.13.0 и 0.12.1 в понедельник... так что отправляйте свои пулл-реквесты, пока не поздно.
I'm planning to release 0.13.0 and 0.12.1 on Monday, primarily featuring the LLVM 18 upgrade and musl 1.2.5 upgrade. If there are any other impactful changes you want to land, you have 5 days to get them in. 0.12.1 will be the last release in the 0.12.x series.


Говорит, такой быстрый выпуск чтобы дистрибутивы могли LLVM 18 спокойно использовать:
the release is primarily aimed at helping distributions package zig since it updates to LLVM 18. distros which have llvm 17 can package zig 0.12.1; distros that have llvm 18 can package 0.13.0


#upstream
🔥5🤯2
Как новый 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