Язык Zig (канал)
Старый Hello World 2015 года: export executable "hello"; #link("c") extern { fn printf(__format: *const u8, ...) -> i32; fn exit(__status: i32) -> unreachable; } export fn _start() -> unreachable { printf("Hello, world!\n"); exit(0); } Влияние…
0.1.0 (октябрь 2017):
const io = @import("std").io;
pub fn main() -> %void {
%return io.stdout.printf("Hello, world!\n");
}
Язык Zig (канал)
0.1.0 (октябрь 2017): const io = @import("std").io; pub fn main() -> %void { %return io.stdout.printf("Hello, world!\n"); }
0.2.0 (март 2018):
По сути этот синтаксис до сих пор остался. (и наверно работал бы на 0.14, если бы не ошибки-варнинги по типу variable is not mutable)
const std = @import("std");
pub fn main() !void {
// If this program is run without stdout attached, exit with an error.
var stdout_file = try std.io.getStdOut();
// If this program encounters pipe failure when printing to stdout, exit
// with an error.
try stdout_file.write("Hello, world!\n");
}По сути этот синтаксис до сих пор остался. (и наверно работал бы на 0.14, если бы не ошибки-варнинги по типу variable is not mutable)
Forwarded from Pavel Bushmakin 🤙🏻
YouTube
The Zig Async IO Interview with Loris Cro, VP Community at Zig Software Foundation
I had a delightful time talking with Loris Cro, the VP of Community at the Zig Software Foundation, about the upcoming changes for async in Zig. Zig's approach to async both stands on the shoulders of giants but also bring's new ideas to how async should…
👍4
Seems good for now but note this is going to disrupt my ultimate plan of creating a viable binary including when there are compilation errors. Including when there are syntax errors.
Пока всё выглядит хорошо, но учти, что это нарушит мой главный план — создавать работоспособный бинарник даже при наличии ошибок компиляции. В том числе при наличии синтаксических ошибок.
На моей памяти это первый раз, когда он упоминает этот план публично, я его ни в каких issues, PR и т.д. не видел раньше
https://github.com/ziglang/zig/pull/24857#issuecomment-3192324792
#upstream
GitHub
Zcu: don't tell linkers about exports if there are compile errors by mlugg · Pull Request #24857 · ziglang/zig
In the best case, this is redundant work, because we aren't actually going to emit a working binary this update. In the worst case, it causes bugs because the linker may not have seen the t...
🐳2
Forwarded from Андрей Краевский
Я спросил mlugg что это такое.
Если вкратце то уже сейчас ошибки по типу unused variable не предотвращают генерацию бинарника (его просто не отдают).
Так что идея расширить это для других видов ошибок. Бинарник будет выдаваться, но некоректные функции будут паниковать в рантайме. Это будет работать примено как ранее отвергнутый sloppy mode. Компилятор это и так уже делает для инкрементальной компиляции так что имеет смысл дать пользователю этим попользоваться
Если вкратце то уже сейчас ошибки по типу unused variable не предотвращают генерацию бинарника (его просто не отдают).
Так что идея расширить это для других видов ошибок. Бинарник будет выдаваться, но некоректные функции будут паниковать в рантайме. Это будет работать примено как ранее отвергнутый sloppy mode. Компилятор это и так уже делает для инкрементальной компиляции так что имеет смысл дать пользователю этим попользоваться
👍3
кстати интересные комментарии по поводу high-frequency trading в Zig:
https://www.reddit.com/r/Zig/comments/wqxrle/comment/il1tm7g/
https://www.reddit.com/r/Zig/comments/wqxrle/comment/il1tm7g/
Reddit
LastCenturyMan's comment on "Zig for trading - data collection, storage, number crunching and displaying"
Explore this conversation and more from the Zig community
Zig 0.15.1 выпущен сегодня:
https://ziglang.org/download/0.15.1/release-notes.html
В 0.15.0 критический баг, поэтому решили его пропустить и сразу залить с фиксом.
#upstream
https://ziglang.org/download/0.15.1/release-notes.html
В 0.15.0 критический баг, поэтому решили его пропустить и сразу залить с фиксом.
#upstream
🔥7❤1
const addr: u32 = 0x10;
const mask: u32 = 0xF;
if (addr & mask == 0) {}
В Си парсится как:
if (addr & (mask == 0)) {}
// @as(u32, 0)В Zig парсится как:
if ((addr & mask) == 0) {}
// @as(bool, true)✍6👍2
Язык Zig (канал)
const addr: u32 = 0x10; const mask: u32 = 0xF; if (addr & mask == 0) {} В Си парсится как: if (addr & (mask == 0)) {} // @as(u32, 0) В Zig парсится как: if ((addr & mask) == 0) {} // @as(bool, true)
Если вдруг будете портировать код с Си на Zig или наоборот, обычно люди скобки пишут (и Clang предупреждение даёт), но иногда вот так оставляют.
Язык Zig (канал)
const addr: u32 = 0x10; const mask: u32 = 0xF; if (addr & mask == 0) {} В Си парсится как: if (addr & (mask == 0)) {} // @as(u32, 0) В Zig парсится как: if ((addr & mask) == 0) {} // @as(bool, true)
В Си изначально не было and оператора (&&), был только bitwise and (&), который использовался для обоих случаев:
Уже потом они добавили операторы && и ||, и поставили им те же приоритеты, что у bitwise (== идет раньше, чем & и &&), для упрощения портирования
if (a == b & c == d)
// имелось в виду:
if (a == b && c == d)
Уже потом они добавили операторы && и ||, и поставили им те же приоритеты, что у bitwise (== идет раньше, чем & и &&), для упрощения портирования
В Zig (и куче других языков) эти операторы были с самого начала, поэтому правила приоритетов можно было сразу поставить более интуитивные, с четким разделением "обязанностей":
addr & mask == 0
// В Си парсится как:
addr & (mask == 0)
// Потому что в старых Си (до появления &&)
// могло иметься ввиду:
addr && (mask == 0)
// В Zig сразу ясно, что это
// побитовая операция с логичным приоритетом:
(addr & mask) == 0
Forwarded from Zig reporter
Язык Zig (канал)
https://ziglang.org/news/2024-financials/ Финансовый отчёт за 2023 + призывают пожертвовать ещё) #upstream
Для сравнения, отчет в прошлом году за 2023: