История изменений
Исправление wandrien, (текущая версия) :
Чем больше курю документацию на Zig, тем больше он мне нравится.
В целом это ровно то, как я себе представлял идеальный ЯП для ниши системного ЯП.
Разница только в том, что я бы делал язык в Ada-подобном синтаксисе, а здесь сделали в Си-подобном.
Похожее впечатление у меня было, когда в нише динамических ЯП я познакомился с Ruby.
Вот в таком выражении:
pub fn main() void {
print("here is a string: '{s}' here is a number: {}\n", .{ a_string, a_number });
}
Форматирующая строка раскрывается в код с проверками типов во время компиляции, и в рантайме не парсится. Исключительно силой вычислений времени компиляции на самом ЯП, без привлечения макросов и чего-либо еще.
Это очень мощно.
Я в своих черновиках проектировал именно так – код на самом ЯП является кодом, который компилятор способен исполнять при компиляции программы.
Дженерики реализуются аналогично – как функции, возвращающие типы или принимающие типы как аргументы.
Исходная версия wandrien, :
Чем больше курю документацию на Zig, тем больше он мне нравится.
В целом это ровно то, как я себе представлял идеальный ЯП для ниши системного ЯП.
Разница только в том, что я бы делал язык в Ada-подобном синтаксисе, а здесь сделали в Си-подобном.
Похожее впечатление у меня было, когда в нише динамических ЯП я познакомился с Ruby.
Вот в таком выражении:
pub fn main() void {
print("here is a string: '{s}' here is a number: {}\n", .{ a_string, a_number });
}
Форматирующая строка раскрывается в код с проверками типов во время компиляции, и в рантайме не парсится. Исключительно силой вычислений времени компиляции на самом ЯП, без привлечения макросов и чего-либо еще.
Это очень мощно.
Я в своих черновиках проектировал именно так – код на самом ЯП является кодом, который компилятор способен исполнять при компиляции программы.
Дженерики реализуются аналогично – как функции, возвращающие типы.