https://github.com/ziglang/zig/pull/17497
pub fn fatal(comptime fmt: []const u8, args: anytype) error{TestFatal} {
fail(fmt, args);
return error.TestFatal;
}
оказывается можно писать и так, думал только error{TestFatal}!void (и т.д.) работает
pub fn fatal(comptime fmt: []const u8, args: anytype) error{TestFatal} {
fail(fmt, args);
return error.TestFatal;
}
оказывается можно писать и так, думал только error{TestFatal}!void (и т.д.) работает
GitHub
std.testing: fail and fatal formatted messaging by pascaldekloe · Pull Request #17497 · ziglang/zig
Two new functions in std.testing:
/// Fail the test with a formatted message but continue execution, unlike fatal.
/// The common pattern is as follows.
///
/// ```zig
/// if (got != want)
/// ...
/// Fail the test with a formatted message but continue execution, unlike fatal.
/// The common pattern is as follows.
///
/// ```zig
/// if (got != want)
/// ...
BuiltinFunction: Use a generated DAFSA (deterministic acyclic finite state automaton) instead of a generated enum
https://github.com/Vexu/arocc/pull/524
related: оптимизация std.meta.stringToEnum https://github.com/ziglang/zig/issues/3863#issuecomment-1763271656
#upstream #производительность
https://github.com/Vexu/arocc/pull/524
related: оптимизация std.meta.stringToEnum https://github.com/ziglang/zig/issues/3863#issuecomment-1763271656
#upstream #производительность
GitHub
BuiltinFunction: Use a generated DAFSA instead of a generated enum by squeek502 · Pull Request #524 · Vexu/arocc
A DAFSA (deterministic acyclic finite state automaton) is essentially a trie flattened into an array, but that also uses techniques to minimize redundant nodes. This provides fast lookups while min...
Язык Zig (канал)
BuiltinFunction: Use a generated DAFSA (deterministic acyclic finite state automaton) instead of a generated enum https://github.com/Vexu/arocc/pull/524 related: оптимизация std.meta.stringToEnum https://github.com/ziglang/zig/issues/3863#issuecomment-1763271656…
GitHub
GitHub - Validark/Accelerated-Zig-Parser: A high-throughput parser for the Zig programming language.
A high-throughput parser for the Zig programming language. - Validark/Accelerated-Zig-Parser
usingnamespace оказывается ещё и на enum/union работает... (я думал только на struct и opaque) тот же результат — публичные обьявления ре-экспортируются
Язык Zig (канал)
usingnamespace оказывается ещё и на enum/union работает... (я думал только на struct и opaque) тот же результат — публичные обьявления ре-экспортируются
const Location = enum(u32) {
box = 0,
stolovaya = 1,
workshop = 2,
mine = 3,
_,
pub const start_facilites: u32 = 2;
pub const end_facilities: u32 = 3;
}
const Everything = struct {
pub usingnamespace Location; // теперь можно писать Everything.start_facilities, но не Everything.box пушто не публичное обьявление, а просто член
};
Königskraut
немного оффтопик, но смотрите что теперь в телеграме есть const std = @import("std"); pub fn main() !void { std.debug.print("kek\n", .{}); }
В k версии [1.9.6 (418)] старый вид, в z/a [10.0.15] новый (с кнопкой копировать) но подсветки нет, в десктоп клиенте [4.11.1] есть и кнопка и подсветка
Кстати насчёт той весёлой задачки „Man or boy test” с Rosetta Code, я по фану сегодня таки сделал её (немного схитрил внутри, но шо поделать — Зиг так хочет), вроде работает с правильными результатами вплоть до 20, дальше мне стека не хватило:
https://rosettacode.org/wiki/Man_or_boy_test?oldid=358095#Zig
https://rosettacode.org/wiki/Man_or_boy_test?oldid=358095#Zig
Rosetta Code
Man or boy test
Background: The man or boy test was proposed by computer scientist Donald Knuth as a means of evaluating implementations of the ALGOL 60 programming language. The...
🤔1
Язык Zig (канал)
Кстати насчёт той весёлой задачки „Man or boy test” с Rosetta Code, я по фану сегодня таки сделал её (немного схитрил внутри, но шо поделать — Зиг так хочет), вроде работает с правильными результатами вплоть до 20, дальше мне стека не хватило: https://ro…
const Record = struct {
yieldFn: *const fn (record: *Record) i32,
k: *i32 = undefined,
x1: *Record = undefined,
x2: *Record = undefined,
x3: *Record = undefined,
x4: *Record = undefined,
x5: *Record = undefined,
inline fn run(record: *Record) i32 {
return record.yieldFn(record);
}
pub fn A(record: *Record) i32 {
return if (record.k.* <= 0)
record.x4.run() + record.x5.run()
else
record.B();
}
fn B(record: *Record) i32 {
record.k.* -= 1;
var k_copy_on_stack: i32 = record.k.*;
var b: Record = .{
.yieldFn = &Record.B,
.k = &k_copy_on_stack,
.x1 = record,
.x2 = record.x1,
.x3 = record.x2,
.x4 = record.x3,
.x5 = record.x4,
};
return b.A();
}
};
const numbers = struct {
fn positiveOne(unused_record: *Record) i32 {
_ = unused_record;
return 1;
}
fn zero(unused_record: *Record) i32 {
_ = unused_record;
return 0;
}
fn negativeOne(unused_record: *Record) i32 {
_ = unused_record;
return -1;
}
};
const std = @import("std");
pub fn main() void {
var i: u31 = 0;
while (i <= 31) : (i += 1) {
var k: i32 = i;
var @"+1_record": Record = .{ .yieldFn = &numbers.positiveOne };
var @"0_record": Record = .{ .yieldFn = &numbers.zero };
var @"-1_record": Record = .{ .yieldFn = &numbers.negativeOne };
var record: Record = .{
.yieldFn = &Record.B,
.k = &k,
.x1 = &@"+1_record",
.x2 = &@"-1_record",
.x3 = &@"-1_record",
.x4 = &@"+1_record",
.x5 = &@"0_record",
};
std.debug.print("[{d:>3}] = {d}\n", .{ i, record.A() });
}
}https://ziglang.org/learn/build-system/
Будущая документация про Zig Build System (будет перенесена в доки std.Build как я понял)
#upstream
Будущая документация про Zig Build System (будет перенесена в доки std.Build как я понял)
#upstream
⚡3
Язык Zig (канал)
Чутка набираю пока в https://github.com/ziglang-ru/zighelp https://zighelp.org/ru/ Плюс немного копирую с старой попытки перевести ziglearn.org. Кто хочет присоединяйтесь))
https://zig.guide/
Тот же ziglearn, только с другим интерфейсов (судя по всему тоже от Sobeston, оригинального автора ziglearn)
Тот же ziglearn, только с другим интерфейсов (судя по всему тоже от Sobeston, оригинального автора ziglearn)
zig.guide
Welcome | zig.guide
Get started with the Zig programming language. Zig is a general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
👍1
Generating a Star Sphere using Zig
https://pollrobots.com/blog/zig/code/2023/11/11/star-sphere-in-zig.html
Генерация карты звезд с помощью разбора звездного каталога.
#блоги
https://pollrobots.com/blog/zig/code/2023/11/11/star-sphere-in-zig.html
Генерация карты звезд с помощью разбора звездного каталога.
#блоги
👍3
Язык 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.