Язык Zig (канал)
Второй translate-c на основе Aro (скорее всего полностью заменит первый translate-c на выхлопе Clang, связанное предложение https://github.com/ziglang/zig/issues/16268) https://github.com/ziglang/zig/pull/17221 #upstream
тут у Arocc сайт и логотип появился:
https://aro.vexu.eu/
https://aro.vexu.eu/
aro.vexu.eu
Aro - a C compiler
Aro is an open-source C compiler written in Zig.
⚡3
https://github.com/ziglang/zig/pull/18017
ошибка при использовании переменной, когда можно было использовать константу (ясен фиг не всё детектит, ну и можно обойти (а иногда и нужно, когда нужно запретить считать в комптайме например):
_ = &variable;
mlugg пишет, что 30 строк сама реализация, всё остальное ~3к это фиксы.
#upstream
ошибка при использовании переменной, когда можно было использовать константу (ясен фиг не всё детектит, ну и можно обойти (а иногда и нужно, когда нужно запретить считать в комптайме например):
_ = &variable;
mlugg пишет, что 30 строк сама реализация, всё остальное ~3к это фиксы.
#upstream
GitHub
compiler: add error for unnecessary use of 'var' by mlugg · Pull Request #18017 · ziglang/zig
Depends on #18006, which corrects some unnecessary uses of var in Aro.
This PR implements #224. The compile error is emitted when a var is never used as an lvalue - more detailed analysis is unfort...
This PR implements #224. The compile error is emitted when a var is never used as an lvalue - more detailed analysis is unfort...
👍4🔥1
Ещё один пример, как вывод @compileLog не совсем точно соответствует внутреннему представлению чего-то в компиляторе:
https://paste.sr.ht/~bratishkaerik/73921b22554e34f3b948ccf413b7f3165966ce6b
const std = @import("std");
pub fn main() void {
const T_SENTIN = [*:null] ?*const u8;
const T_NOT_SENTIN = [* ] ?*const u8;
@compileLog( @typeInfo(T_SENTIN).Pointer.sentinel);
@compileLog(@typeInfo(T_NOT_SENTIN).Pointer.sentinel);
@compileLog( @typeInfo(T_SENTIN).Pointer.sentinel == @typeInfo(T_SENTIN).Pointer.sentinel);
@compileLog( @typeInfo(T_SENTIN).Pointer.sentinel == @typeInfo(T_NOT_SENTIN).Pointer.sentinel);
@compileLog(@typeInfo(T_NOT_SENTIN).Pointer.sentinel == @typeInfo(T_SENTIN).Pointer.sentinel);
@compileLog(@typeInfo(T_NOT_SENTIN).Pointer.sentinel == @typeInfo(T_NOT_SENTIN).Pointer.sentinel);
}
// // Zig 0.10.1 stage1
// | *const anyopaque
// | *const anyopaque
// | true
// | false
// | false
// | true
//
// // Zig 0.10.1 stage2, Zig 0.11.0
// @as(?*const anyopaque, null)
// @as(?*const anyopaque, null)
// @as(bool, false)
// @as(bool, false)
// @as(bool, false)
// @as(bool, true)
//
// // Zig 0.12.0-dev.1642+5f8641401
// @as(?*const anyopaque, null)
// @as(?*const anyopaque, null)
// @as(bool, true)
// @as(bool, false)
// @as(bool, false)
// @as(bool, true)
https://paste.sr.ht/~bratishkaerik/73921b22554e34f3b948ccf413b7f3165966ce6b
https://ziggit.dev/t/a-translation-of-karl-seguins-learning-zig-into-russian/2234
Перевод https://www.openmymind.net/learning_zig/ на русский, репозиторий https://github.com/dee0xeed/learning-zig-rus
Перевод https://www.openmymind.net/learning_zig/ на русский, репозиторий https://github.com/dee0xeed/learning-zig-rus
Ziggit
A translation of Karl Seguin's "Learning Zig" into Russian
I’ve translated the book in the header into Russian. It’s not a machine translation, I did everything manually (and “brainually” 🙃). A chapter about interfaces included. Available here.
👍9
https://github.com/zigcc/awesome-zig
Список всячины на Zig, репозиторий группы китаеязычных пользователей Zig
@ZigChinese https://zigcc.github.io/
Список всячины на Zig, репозиторий группы китаеязычных пользователей Zig
@ZigChinese https://zigcc.github.io/
GitHub
GitHub - zigcc/awesome-zig: A collection of awesome projects in Zig.
A collection of awesome projects in Zig. . Contribute to zigcc/awesome-zig development by creating an account on GitHub.
Язык Zig (канал)
https://github.com/ok-ryoko/multiring.zig Мультикольца на Zig под лицензией Expat. #библиотеки
Васянский перевод https://github.com/ok-ryoko/multiring.zig/blob/a812375a84d64c7bf9dbec37b6b446e531e3b9d2/docs/DESIGN.md#choice-of-programming-language
# Выбор языка программирования
При работе с узлами в некоторых контекстах тип узла важен, а в других — нет. Таким образом, выбранный нами язык должен облегчить нам достижение полиморфизма, желательно над фиксированным ограниченным набором типов. (Существует только два типа узлов.) Размеченные объединения в Zig нам подходят идеально. Go предоставляет нам интерфейсы, но они слишком мощные — нам не нужно определять произвольное количество типов узлов. Более того, в Go нет встроенного типа для перечислений (они эмулируются с помощью построителя констант iota). Си предоставляет нам только глобальные (прим. пер.: без привязки к пространствам имён) перечисления.
Zig снабжает нас контрактом unreachable, а также синтаксисом захвата для разыменования опциональрых указателей (прим. пер.: судя по всему, это if (optional) |non_optional| { ... } ). Си и Go не предоставляют эквивалентных функций.
Си и Zig требуют от нас вручную управлять динамически выделяемой памятью. Поэтому мы должны иметь возможность гарантировать, что наша реализация не взаимодействует с кучей, написав ноль строк кода управления памятью. Обеспечить ту же гарантию сложнее в языке со сборкой мусора, таком как Go.
Мы ценим удобство сопровождения, поэтому считаем, что выбранный нами язык должен предоставить нам надежный опыт разработки. Go предоставляет выразительный интерфейс командной строки go, соедржащий команды для форматирования, анализа, создания и тестирования кода Go, а также управления модулями Go. Инструменты Зига выразительны, но не завершены: отсутствует (отдельный) инструмент статического анализа, а менеджер пакетов ещё не стабилен. С другой стороны, Си не предоставляет стандартизированных инструментов разработчика вообще, оставляя нам свободу смешивать и подбирать нужные нам компоненты, вплоть до реализации самого языка. Используем ли мы GNU Compiler Collection (GCC), Clang/LLVM или что-то ещё? Требуется довольно много времени для исследования разных выборов, которые мы, возможно, даже не задействуем.
Си уже более 50 лет, и он стабилен, используется повсеместно, а также имеет ряд международных стандартов и конкурирующих наборов инструментов. По состоянию на май 2023 года Си занимает 2-е место в индексе TIOBE. Go не так зрел, как Си (ему более 10 лет), но он стабилен и широко используется, занимая 12-е место в индексе TIOBE. Go занял свою нишу в экосистемах Интернета, контейнеров и утилит командной строки. Напротив, Zig не является ни стабильным, ни широко используемым. Выбор Zig вместо C и Go означает, что разработчику придётся выделить ресурсы для того, чтобы идти в ногу с последней стабильной версией языка и брать на себя риск внесения критических изменений. Это также означает уменьшение доступности проекта.
Исходя из этих соображений, владелец репозитория решил реализовать мультикольцо на языке Zig.
# Выбор языка программирования
При работе с узлами в некоторых контекстах тип узла важен, а в других — нет. Таким образом, выбранный нами язык должен облегчить нам достижение полиморфизма, желательно над фиксированным ограниченным набором типов. (Существует только два типа узлов.) Размеченные объединения в Zig нам подходят идеально. Go предоставляет нам интерфейсы, но они слишком мощные — нам не нужно определять произвольное количество типов узлов. Более того, в Go нет встроенного типа для перечислений (они эмулируются с помощью построителя констант iota). Си предоставляет нам только глобальные (прим. пер.: без привязки к пространствам имён) перечисления.
Zig снабжает нас контрактом unreachable, а также синтаксисом захвата для разыменования опциональрых указателей (прим. пер.: судя по всему, это if (optional) |non_optional| { ... } ). Си и Go не предоставляют эквивалентных функций.
Си и Zig требуют от нас вручную управлять динамически выделяемой памятью. Поэтому мы должны иметь возможность гарантировать, что наша реализация не взаимодействует с кучей, написав ноль строк кода управления памятью. Обеспечить ту же гарантию сложнее в языке со сборкой мусора, таком как Go.
Мы ценим удобство сопровождения, поэтому считаем, что выбранный нами язык должен предоставить нам надежный опыт разработки. Go предоставляет выразительный интерфейс командной строки go, соедржащий команды для форматирования, анализа, создания и тестирования кода Go, а также управления модулями Go. Инструменты Зига выразительны, но не завершены: отсутствует (отдельный) инструмент статического анализа, а менеджер пакетов ещё не стабилен. С другой стороны, Си не предоставляет стандартизированных инструментов разработчика вообще, оставляя нам свободу смешивать и подбирать нужные нам компоненты, вплоть до реализации самого языка. Используем ли мы GNU Compiler Collection (GCC), Clang/LLVM или что-то ещё? Требуется довольно много времени для исследования разных выборов, которые мы, возможно, даже не задействуем.
Си уже более 50 лет, и он стабилен, используется повсеместно, а также имеет ряд международных стандартов и конкурирующих наборов инструментов. По состоянию на май 2023 года Си занимает 2-е место в индексе TIOBE. Go не так зрел, как Си (ему более 10 лет), но он стабилен и широко используется, занимая 12-е место в индексе TIOBE. Go занял свою нишу в экосистемах Интернета, контейнеров и утилит командной строки. Напротив, Zig не является ни стабильным, ни широко используемым. Выбор Zig вместо C и Go означает, что разработчику придётся выделить ресурсы для того, чтобы идти в ногу с последней стабильной версией языка и брать на себя риск внесения критических изменений. Это также означает уменьшение доступности проекта.
Исходя из этих соображений, владелец репозитория решил реализовать мультикольцо на языке Zig.
GitHub
multiring.zig/docs/DESIGN.md at a812375a84d64c7bf9dbec37b6b446e531e3b9d2 · ok-ryoko/multiring.zig
Hierarchical, forwardly linked and circularly linked abstract data type in Zig - ok-ryoko/multiring.zig
👍8
Язык Zig (канал)
https://github.com/michal-z/zig-gamedev/wiki/Progress-Reports#july-2022
This media is not supported in your browser
VIEW IN TELEGRAM
Змейка на Зиг с использованием семейства библиотек zig-gamedev. Лицензия Expat.
https://github.com/btipling/btzig-snake
#игры
https://github.com/btipling/btzig-snake
#игры
👍4❤1
Шаблон для Zig решебника Advent of Code, для master'а (сейчас 0.12.0-dev.1754+2a3226453). На 2023 уже первая задача есть https://adventofcode.com/2023 .
https://github.com/SpexGuy/Zig-AoC-Template
https://github.com/SpexGuy/Zig-AoC-Template
GitHub
GitHub - SpexGuy/Zig-AoC-Template: A template for Advent of Code participants using Zig
A template for Advent of Code participants using Zig - SpexGuy/Zig-AoC-Template
👍1
Язык Zig (канал)
https://ziggit.dev/t/a-translation-of-karl-seguins-learning-zig-into-russian/2234 Перевод https://www.openmymind.net/learning_zig/ на русский, репозиторий https://github.com/dee0xeed/learning-zig-rus
Сайт автора кстати http://zed.karelia.ru/go.to/feed.back/other , судя по всему TG у него нет)
zed.karelia.ru
::
zed.karelia.ru/feed.back/other ::
zed.karelia.ru/feed.back/other ::
Персональный сайт Жиганова Евгения
обратный цикл без целочисленных знаковых типов (i32, isize т.д.):
i = 4
i = 3
i = 2
i = 1
i = 0
(переполнение) i = maxInt
maxInt >= steps, цикл стопается.
На большинстве (емнип?) архитектур без потерь производительности.
// все типы начиная с u1.Примерная логика такая:
const steps: u32 = 5;
// Работает в диапазоне [1, maxInt]
var i = steps - 1;
while (i < steps) : (i -℅= 1) {
// Что-то делаем
}
i = 4
i = 3
i = 2
i = 1
i = 0
(переполнение) i = maxInt
maxInt >= steps, цикл стопается.
На большинстве (емнип?) архитектур без потерь производительности.
Forwarded from Константин
По-моему, так естественней выглядит:
var i = steps;
while (i > 0) { i -= 1;
std.debug.print("{}\n", .{i});
}
👌1
С новым годом всех!!! (у меня +6)
🦀🦀🦀 🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊⚡
🦀🦀🦀 🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊⚡
🎄9❤5👍1🔥1
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