HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
1 <p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
2 <p>Спустя шесть месяцев работы и 2023 коммитов команда разработчиков Zig<a>выпустила</a>обновление 0.9.0. Теперь<a>Toolchain</a>работает лучше,<a>Self-Hosted Compiler</a>завершён на 44 процента,<a>Support Table</a>расширена, а <a>Standard Library</a>стал более полезным.</p>
2 <p>Спустя шесть месяцев работы и 2023 коммитов команда разработчиков Zig<a>выпустила</a>обновление 0.9.0. Теперь<a>Toolchain</a>работает лучше,<a>Self-Hosted Compiler</a>завершён на 44 процента,<a>Support Table</a>расширена, а <a>Standard Library</a>стал более полезным.</p>
3 <p>Одно из главных изменений языка - возможность выделить для указателя или переменной определённое адресное пространство. Делается это с помощью ключевого слова<strong>addrspace</strong>.</p>
3 <p>Одно из главных изменений языка - возможность выделить для указателя или переменной определённое адресное пространство. Делается это с помощью ключевого слова<strong>addrspace</strong>.</p>
4 pub const will_be_placed_in_flash: i32 addrspace(.flash) = 123; pub fn readFlash(ptr: *addrspace(.flash) i32) i32 { return ptr.*; }<p>Теперь<strong>@tagName</strong>,<strong>@errorName</strong>,<strong>@typeName</strong>и <strong>@embedFile</strong>являются<strong>*[N: 0]const u8</strong>, а не <strong>[]const u8</strong>. Это означает, что они могут использоваться везде, где допустим строковый литерал. Другими словами, их можно привести к одному из следующих типов:</p>
4 pub const will_be_placed_in_flash: i32 addrspace(.flash) = 123; pub fn readFlash(ptr: *addrspace(.flash) i32) i32 { return ptr.*; }<p>Теперь<strong>@tagName</strong>,<strong>@errorName</strong>,<strong>@typeName</strong>и <strong>@embedFile</strong>являются<strong>*[N: 0]const u8</strong>, а не <strong>[]const u8</strong>. Это означает, что они могут использоваться везде, где допустим строковый литерал. Другими словами, их можно привести к одному из следующих типов:</p>
5 []const u8 [*:0]const u8 [:0]const u8<p>Добавлены<strong>@minimum</strong>и <strong>@maximum</strong>. Они могут принимать целые и дробные числа, а также векторы. В последнем случае сравнение происходит поэлементно.</p>
5 []const u8 [*:0]const u8 [:0]const u8<p>Добавлены<strong>@minimum</strong>и <strong>@maximum</strong>. Они могут принимать целые и дробные числа, а также векторы. В последнем случае сравнение происходит поэлементно.</p>
6 @minimum(a: T, b: T) T<p>Удалили ключевые слова<strong>true</strong>,<strong>false</strong>,<strong>undefined</strong>и <strong>null</strong>. Теперь они являются примитивами, такими как<strong>void</strong>,<strong>u32</strong>и прочие. Их можно использовать, например, в качестве имён для свойств структур:</p>
6 @minimum(a: T, b: T) T<p>Удалили ключевые слова<strong>true</strong>,<strong>false</strong>,<strong>undefined</strong>и <strong>null</strong>. Теперь они являются примитивами, такими как<strong>void</strong>,<strong>u32</strong>и прочие. Их можно использовать, например, в качестве имён для свойств структур:</p>
7 const Foo = struct { true: i32, false: i32, undefined: i32, null: i32, };&lt;<p>В Zig появился синтаксис, который позволяет производить безопасные арифметические операции. Если результат не помещается в переменную определённого типа, то значение будет приведено к минимуму или максимуму.</p>
7 const Foo = struct { true: i32, false: i32, undefined: i32, null: i32, };&lt;<p>В Zig появился синтаксис, который позволяет производить безопасные арифметические операции. Если результат не помещается в переменную определённого типа, то значение будет приведено к минимуму или максимуму.</p>
8 const std = @import("std"); const expect = std.testing.expect; test "example" { var x: u8 = 200; var y: u8 = 100; try expect(x +| y == 255); try expect(y -| x == 0); try expect(y *| x == 255); try expect(y &lt;&lt;| x == 255)$ zig test saturating_arithmetic.zig 1/1 test "example"... OK All 1 tests passed.<p>Теперь компилятор выдаёт ошибки для неиспользуемых локальных переменных или параметров.</p>
8 const std = @import("std"); const expect = std.testing.expect; test "example" { var x: u8 = 200; var y: u8 = 100; try expect(x +| y == 255); try expect(y -| x == 0); try expect(y *| x == 255); try expect(y &lt;&lt;| x == 255)$ zig test saturating_arithmetic.zig 1/1 test "example"... OK All 1 tests passed.<p>Теперь компилятор выдаёт ошибки для неиспользуемых локальных переменных или параметров.</p>
9 test "example" { var x: i32 = 1234; }$ zig test test.zig docgen_tmp/test.zig:2:9: error: unused local variable var x: i32 = 1234; ^<p>А ещё добавили<strong>@select</strong>. Он выбирает значения поэлементно из векторов<strong>a</strong>и <strong>b</strong>по предикату<strong>pred</strong>. Если<strong>pred[i]</strong>истинно, то результатом будет<strong>a[i]</strong>, иначе<strong>b[i]</strong>.</p>
9 test "example" { var x: i32 = 1234; }$ zig test test.zig docgen_tmp/test.zig:2:9: error: unused local variable var x: i32 = 1234; ^<p>А ещё добавили<strong>@select</strong>. Он выбирает значения поэлементно из векторов<strong>a</strong>и <strong>b</strong>по предикату<strong>pred</strong>. Если<strong>pred[i]</strong>истинно, то результатом будет<strong>a[i]</strong>, иначе<strong>b[i]</strong>.</p>
10 @select(comptime T: type, pred: @Vector(len, bool), a: @Vector(len, T), b: @Vector(len, T)) @Vector(len, T)<p>Разработчики<a>рассказали</a>, что следующее мажорное обновление - 0.10.0 - будет включать стабилизацию языка, первый драфт спецификации, а также завершённый компилятор.</p>
10 @select(comptime T: type, pred: @Vector(len, bool), a: @Vector(len, T), b: @Vector(len, T)) @Vector(len, T)<p>Разработчики<a>рассказали</a>, что следующее мажорное обновление - 0.10.0 - будет включать стабилизацию языка, первый драфт спецификации, а также завершённый компилятор.</p>
11 <p>Полный список изменений можно посмотреть<a>на официальном сайте</a>.</p>
11 <p>Полный список изменений можно посмотреть<a>на официальном сайте</a>.</p>
12 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
12 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>