Zig's Lovely Syntax 💬 Длинная дискуссия
Zig выглядит почти как Rust, но делает синтаксис ещё приятнее за счёт более простой семантики и ряда изящных решений.
Числа
Литералы 92
всегда имеют тип comptime_int
; при присваивании они неявно приводятся к нужному типу. Суффиксов нет.
Строки
Многострочные «сырые» строки пишутся через \\
в начале каждой строки; \
не экранируется, отступы не портятся, а лексер работает построчно.
Структуры
.{ .x = 1, .y = 2 }
— запись поля через .x =
совпадает с присваиванием, что позволяет грепом находить именно записи, а не чтения.
Типы
Все типы префиксные: u32
, [3]u32
, ?[3]u32
, *const ?[3]u32
. Разыменование постфиксное: ptr.*
.
Идентификаторы
Синтаксис @"имя с пробелом"
позволяет обходить ключевые слова и экспортировать любые имена.
Функции
fn add(x: i32, y: i32) i32
— без стрелки ->
, так как лямбд нет, а возвращаемый тип всегда обязателен. pub fn main() void {}
.
Переменные
const
и var
; часто используемое const
короче, чем в Rust, но всё же длиннее Kotlin-овского val
.
Комментарии (156)
- Обсуждение разделилось: кому-то синтаксис Zig кажется «прекрасным» минимализмом, другим — «шумным» и «капризным».
- Спор о порядке «имя: тип» vs «тип имя»: одни хотят видеть тип первым, другие — имя.
- Критика деталей: @-префиксы,
.{}
, отсутствие лямбд, перенос строк,orelse
без пробела. - Плюсы: raw-строки Zig решают проблему отступов; обработка ошибок через
try
нравится многим. - Сравнения: Kotlin, C#, Go, Rust, D — каждый считает «своё» лучше.
- Итог: «красота» синтаксиса субъективна и во многом привычна; после практики Zig начинает нравиться.