https://ziglang.org/news/2024-financials/
Финансовый отчёт за 2023 + призывают пожертвовать ещё)
#upstream
Финансовый отчёт за 2023 + призывают пожертвовать ещё)
#upstream
❤2
Язык Zig (канал)
https://youtube.com/watch?v=AqDdWEiSwMM
Тама стрим недавно закончилсч, с планом на 2024 год: https://www.youtube.com/watch?v=5eL_LcxwwHg
#upstream #видео
#upstream #видео
YouTube
[#36] Zig Roadmap 2024 - Andrew Kelley
Links:
https://ziglang.org/news/2024-financials/#2024-financial-report-and-fundraiser
https://sycl.it
0:00 Intro
3:00 Talk
30:15 Q&A
https://ziglang.org/news/2024-financials/#2024-financial-report-and-fundraiser
https://sycl.it
0:00 Intro
3:00 Talk
30:15 Q&A
⚡4
Forwarded from GOLOVATSKII
Если кто-то будет в Ульяновске / Питере, то я буду выступать с докладом про Зиг и эмулятор для MMORPG на Стачке 🙂
https://nastachku.ru
Даешь Зиг в массу :3
https://nastachku.ru
Даешь Зиг в массу :3
👏3🍓1
Большую часть компилятора хотят вынести в отдельные файлы и компилировать по мере надобности прямо во время работы. Первым делом выносят zig fmt и zig reduce.
По идее, это позволит легче контрибутить в сам проект или патчить после установки (т.к. файлы прямо тут, в папке lib/), уменьшить размер всего набора пакетов Zig и уменьшить время сборки (хотя по сути оно будет просто „размазано” в рантайме, но учитывая что не весь код используется для компиляции, доожно быть несущественно).
Из того, что должны оставить: компиляцию нативным бэкендом и запуск дочерных процессов. Грубо говоря, если вы скачиваете Zig для x86_64 на Линукс какой-нить, в самом исполняемом файле "zig" будет только x86_64 backend и этот самый запуск, для Hello World этого хватит.
Но если вы захотите сделать zig fmt или скомпилировать с помощью aarch64 backend, он скомпилирует эти файлы в lib/ и будет уже ими управлять. Т.к. система кэширования уже есть, одного раза должно хватить (пока не измените там код).
Для обычного пользователя ничего не поменяется (те же самые команды и т.д.), но первая компиляция станет чуть-чуть медленнее.
#upstream
По идее, это позволит легче контрибутить в сам проект или патчить после установки (т.к. файлы прямо тут, в папке lib/), уменьшить размер всего набора пакетов Zig и уменьшить время сборки (хотя по сути оно будет просто „размазано” в рантайме, но учитывая что не весь код используется для компиляции, доожно быть несущественно).
Из того, что должны оставить: компиляцию нативным бэкендом и запуск дочерных процессов. Грубо говоря, если вы скачиваете Zig для x86_64 на Линукс какой-нить, в самом исполняемом файле "zig" будет только x86_64 backend и этот самый запуск, для Hello World этого хватит.
Но если вы захотите сделать zig fmt или скомпилировать с помощью aarch64 backend, он скомпилирует эти файлы в lib/ и будет уже ими управлять. Т.к. система кэширования уже есть, одного раза должно хватить (пока не измените там код).
Для обычного пользователя ничего не поменяется (те же самые команды и т.д.), но первая компиляция станет чуть-чуть медленнее.
#upstream
GitHub
ship even more of the compiler in source form · Issue #19063 · ziglang/zig
You know what's really pleasant to work on? The build system. The zig build system is shipped in source form, and when you run zig build, zig compiles the build runner from source, and then run...
🔥1
Полностью переработанный autodoc, там слишком много чего технического поменяли, так что пишу только то, что полезно самим пользователям.
https://github.com/ziglang/zig/pull/19208
Для документации стандартной библиотеки:
* До: Собирается за 13.3 секунды, ест гигабайт памяти, выхлоп 47 мегабайт.
* После: Собирается за 24 миллисекунды, ест 90 мегабайт памяти, выхлоп 12 мегабайт.
И ещё закрывает 9 issues. Из минусов: теперь требует поддержку WebAssembly в браузере, т.к. основная логика написана на Zig, который компилируется потом в WASM. Ну и часть нагрузки теперь перенесена с сборщика на браузер клиента. Зато несёт больше интерактивности.
> lib/docs/ziglexer.js was an implementation of Zig language tokenization in JavaScript, despite Zig already exposing its own tokenizer in the standard library. When I saw this added to the zig project, a little part of me died inside.
#upstream
https://github.com/ziglang/zig/pull/19208
Для документации стандартной библиотеки:
* До: Собирается за 13.3 секунды, ест гигабайт памяти, выхлоп 47 мегабайт.
* После: Собирается за 24 миллисекунды, ест 90 мегабайт памяти, выхлоп 12 мегабайт.
И ещё закрывает 9 issues. Из минусов: теперь требует поддержку WebAssembly в браузере, т.к. основная логика написана на Zig, который компилируется потом в WASM. Ну и часть нагрузки теперь перенесена с сборщика на браузер клиента. Зато несёт больше интерактивности.
> lib/docs/ziglexer.js was an implementation of Zig language tokenization in JavaScript, despite Zig already exposing its own tokenizer in the standard library. When I saw this added to the zig project, a little part of me died inside.
#upstream
GitHub
Redesign How Autodoc Works by andrewrk · Pull Request #19208 · ziglang/zig
This branch deletes the Autodoc implementation and replaces it with a new one.
High Level Strategy
The old implementation looked like this:
5987 src/Autodoc.zig
435 src/autodoc/render_source.z...
High Level Strategy
The old implementation looked like this:
5987 src/Autodoc.zig
435 src/autodoc/render_source.z...
🔥6
https://github.com/ziglang/zig/pull/19459
Черновой запрос на слияние, добавляющий поддержку синтаксиса "labeled continue inside a switch", т.е. computed goto (таблицы переходов). Пример кода (немного упрощено, с новых тестов):
#upstream
Черновой запрос на слияние, добавляющий поддержку синтаксиса "labeled continue inside a switch", т.е. computed goto (таблицы переходов). Пример кода (немного упрощено, с новых тестов):
const std = @import("std");
const Tag = enum {
a,
b,
c,
};
pub fn main() !void {
const tag: Tag = .a;
const result = brk: switch (tag) {
.a => continue :brk .c, // 1
.b => break :brk false, // 3
.c => continue :brk .b, // 2
};
try std.testing.expect(result == false);
}
В этом примере, switch с меткой brk сначала перейдёт в ветку .a, которая говорит "продолжить и перейти в ветку .c*, которая тоже говорит "продолжить и перейти в ветку .b", где блок прерывается.#upstream
GitHub
Computed gotos by EzequielRamis · Pull Request #19459 · ziglang/zig
Closes #8220.
I took the risk of contributing because it's my first time working with something complex like the zig source code, but I'm currently doing a college project with it and I wan...
I took the risk of contributing because it's my first time working with something complex like the zig source code, but I'm currently doing a college project with it and I wan...
🤯6
Язык Zig (канал)
https://github.com/ziglang/zig/pull/19459 Черновой запрос на слияние, добавляющий поддержку синтаксиса "labeled continue inside a switch", т.е. computed goto (таблицы переходов). Пример кода (немного упрощено, с новых тестов): const std = @import("std");…
Для понимания можно ещё проще пример сделать:
Автор планирует добавить поддержку чисел, булевых значений, перечислений (enum) и помеченных объединений (tagged union), но не знает, нужно ли поддерживать error values.
const bit: u1 = 0;Тут получился обычный бесконечный цикл, где switch скачет от 0 до 1 и обратно.
label: switch (bit) {
0 => continue :label 1,
1 => continue :label 0,
}
Автор планирует добавить поддержку чисел, булевых значений, перечислений (enum) и помеченных объединений (tagged union), но не знает, нужно ли поддерживать error values.
Язык Zig (канал)
https://github.com/ziglang/zig/pull/19459 Черновой запрос на слияние, добавляющий поддержку синтаксиса "labeled continue inside a switch", т.е. computed goto (таблицы переходов). Пример кода (немного упрощено, с новых тестов): const std = @import("std");…
Чем это отличается от обычного:
А в варианте с labeled continue она будет гарантированно создана во всех режимах сборки (в том числе Debug).
Ну и размер самой таблице зависит от того, какой тип принимает switch, т.е. в u8 или enum(u8) может быть до 255 вхождений, а в u16 уже 65 535.
Это всё включено в размер сгенерированного кода, поэтому при необдуманном пользовании бинарник может сильно распухнуть (ну как я понял), а при обдуманном хорошо так поднять производительность.
var tag: Tag = .a;В варианте с while-switch таблицы переходов может и не появиться, нет гарантий, это зависит от оптимизатора.
const result = brk: while (true) switch (tag) {
.a => {
tag = c;
continue :brk;
},
.b => break :brk false,
.c => {
tag = b;
continue :brk;
},
};
А в варианте с labeled continue она будет гарантированно создана во всех режимах сборки (в том числе Debug).
Ну и размер самой таблице зависит от того, какой тип принимает switch, т.е. в u8 или enum(u8) может быть до 255 вхождений, а в u16 уже 65 535.
Это всё включено в размер сгенерированного кода, поэтому при необдуманном пользовании бинарник может сильно распухнуть (ну как я понял), а при обдуманном хорошо так поднять производительность.
🔥2👍1
Я тут пока лазил в кишках компилятора (с
ZLS при этом молчит (ломается походу) и не даёт автокомплит для std_ref.
@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
Язык Zig (канал)
Я тут пока лазил в кишках компилятора (с @field химичу), заметил одну вещь: пропускать указатель (т.е. писать "ab.cc" вместо "ab.*.cc") можно не только в полях, но и в декларациях (типы добавил для наглядности) const std: type = @import("std"); const std_ref:…
Сначала подумал, что у себя в форке что-то там сломал, но на мастер ветке то же самое.
Forwarded from gavr
YouTube
Зачем нужен Zig, и чем он отличается от других языков
В выпуске мы придумали идеальное описание языка программирования Zig – это DSL для машинного кода. И за этим определением кроется куча интересных концепций, начиная от брутальной простоты в синтаксисе и фичах, заканчивая метапрограммированием, основанном…
👍10👎1
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. странно, что стрима не было
И снова жирнющий релиз получился
https://ziglang.org/download/0.12.0/release-notes.html
#upstream
p.s. странно, что стрима не было
🔥13👎1
Язык Zig (канал)
https://github.com/ziglang/zig/pull/19459 Черновой запрос на слияние, добавляющий поддержку синтаксиса "labeled continue inside a switch", т.е. computed goto (таблицы переходов). Пример кода (немного упрощено, с новых тестов): const std = @import("std");…
GitHub
compiler: implement labeled switch/continue by mlugg · Pull Request #19812 · ziglang/zig
TODO: PR message.
@Luukdegram, any chance you'd be able to un-regress the WASM backend here? I broke loop and probably fixed it (although I won't claim to have tested it), but I broke switc...
@Luukdegram, any chance you'd be able to un-regress the WASM backend here? I broke loop and probably fixed it (although I won't claim to have tested it), but I broke switc...
🔥2
Итераторы, всякие filter+reduce, и регексы
Пример с репо:
https://github.com/andrewCodeDev/Fluent/blob/511f02345c4eac28a6a80e8cfc8598f98f9863d5/README.md#regex---pcre-standard
#библиотеки
Пример с репо:
var itr = Fluent.match("[abc]\\d+", "_ab112_c987b123_d16_");
while (itr.next()) |substr| { // ...https://github.com/andrewCodeDev/Fluent/blob/511f02345c4eac28a6a80e8cfc8598f98f9863d5/README.md#regex---pcre-standard
#библиотеки
GitHub
Fluent/README.md at 511f02345c4eac28a6a80e8cfc8598f98f9863d5 · andrewCodeDev/Fluent
Fluent interface for REGEX, iteration, and algorithm chaining. - andrewCodeDev/Fluent
🔥6🤯3👍1
Написание планировщика задач на Zig (на англ.)
(который в многопоточных приложениях, а не TODO-лист)
#блоги
(который в многопоточных приложениях, а не TODO-лист)
#блоги
www.openmymind.net
Writing a task scheduler in Zig
How a mutex, a condition variable and a priority queue can be used to build a simple task scheduler in Zig.
👍8
Язык Zig (канал)
https://github.com/Validark/Accelerated-Zig-Parser
Запись вчерашнего стрима про этот парсер:
https://www.youtube.com/watch?v=FDiUKafPs0U
https://www.youtube.com/watch?v=FDiUKafPs0U
YouTube
Hyper-optimizing the Zig Parser: Part 2 w/ Niles @Validark
Powered by Restream https://restream.io
Discord: https://discord.gg/zig
Join Online:
https://twitch.tv/utahzig
https://www.youtube.com/@utahzig/streams
https://meet.jit.si/utah-zig (ping in the discord if this isn't up)
Discord: https://discord.gg/zig
Join Online:
https://twitch.tv/utahzig
https://www.youtube.com/@utahzig/streams
https://meet.jit.si/utah-zig (ping in the discord if this isn't up)
🔥5