Комментарии 7
Очень странное начало статьи без какого-либо вступления о том, что такое Zig.
А причем тут Rust?
И какой это вообще язык? Это не Rust, и это тем более не C++.
Статья с косяками. И переводчик «переташил» её как есть. Перевод машинный. Имейте это ввиду.
6 — Приватные поля в структурах
Тут стоит сделать ремарку. Приватные поля в структурах возможны. Просто это уже не поля, а обычные переменные или константы. То есть объявляя структуру можно просто добавить что-то типа:
var value: u32 = 0;
и потом эту переменную использовать.
Такой код валидный:
pub const App = struct {
// это внутренняя константа, приватная,
// доступна только внутри самой структуры
const Self = @This();
// это внутренние константы, они публичные,
// то есть доступны как поля извне
pub const settings = _settings;
pub const PlatformX11 = x11.Platform(Self);
pub const PlatformWayland = wayland.Platform(Self);
pub const PlatformWindows = windows.Platform(Self);
pub const PlatformXlib = xlib.Platform(Self);
// это поля структуры, публичны по умолчанию
type: PlatformType,
allocator: Allocator,
window: if (settings.single_window) ?*Window else void,
windows: if (settings.single_window) void else []*Window,
// ... какой-то еще код, который работает с полями ...
}
Взят из gui библиотеки zwl (https://github.com/Aransentin/ZWL).
Особенность здесь в том, что внутренние переменные и константы должны быть проинициализированы на этапе компиляции, это особенность языка. В то время как поля могут быть не проинициализированы. Это как бы правило языка, но тогда их обязательно нужно инициализировать при создании структуры.
Логика тут на самом деле есть, и она довольна простая. Но почему возник вопрос у автора оригинальной статьи я не совсем понял. Возможно автор оригинальной статьи сравнивает Zig с одним из языков, на которых он писал ранее. И я считаю, что в рамках полей структур это не правильно, потому что Zig в какой-то мере уникален
10 причуд Zig