On branch main

modified:   src/ch04.md
modified:   src/ch06.md
modified:   src/ch09.md
This commit is contained in:
zed
2023-11-24 00:00:27 +03:00
parent a66ced3ca4
commit 8bcdef3738
3 changed files with 16 additions and 15 deletions

View File

@@ -10,7 +10,7 @@
использования памяти компьютера. Если вы свободно обращаетесь с использования памяти компьютера. Если вы свободно обращаетесь с
указателями, динамическим выделением/освобождением памяти, понимаете, что указателями, динамическим выделением/освобождением памяти, понимаете, что
такое "висячий" указатель (dangling pointer), тогда вы можете пропустить такое "висячий" указатель (dangling pointer), тогда вы можете пропустить
пару глав и перейти к главе 6, там есть некоторые особенности, пару глав и перейти к Главе VI, там есть некоторые особенности,
специфичные для Zig. специфичные для Zig.
В следующем примере создаётся пользователь с идентификатором 1 и "силой" В следующем примере создаётся пользователь с идентификатором 1 и "силой"
@@ -50,7 +50,7 @@ src/ex-ch04-01.zig:16:16: error: cannot assign to constant
~~~~~~~~~~~^~~~ ~~~~~~~~~~~^~~~
``` ```
Мы уже знаем из главы 1, что параметры функций являются константами Мы уже знаем из Главы I, что параметры функций являются константами
и поэтому инструкция `user.power += 1;` некорректна. Чтобы исправить и поэтому инструкция `user.power += 1;` некорректна. Чтобы исправить
эту ошибку компиляции, мы могли бы написать что-то вроде эту ошибку компиляции, мы могли бы написать что-то вроде

View File

@@ -757,16 +757,17 @@ defer list.deinit();
## Распределитель с фиксированным буфером ## Распределитель с фиксированным буфером
Последний аллокатор, который мы изучим, это `std.heap.FixedBufferAllocator`, Последний аллокатор, который мы изучим, это
который выделяет место под объекты в буфере (то есть в `[]u8`), который `std.heap.FixedBufferAllocator`, который выделяет место под объекты в
ему предоставляется при инициализации. У этого аллокатора есть два главных преимущества. буфере (то есть в `[]u8`), который ему предоставляется при инициализации.
Во-первых, поскольку память уже выделена заранее, это быстро. Во-вторых, У этого аллокатора есть два главных преимущества. Во-первых, поскольку
он естественным образом ограничивает максимальный размер выделяемой памяти, память уже выделена заранее, это быстро. Во-вторых, он естественным
что, с другой стороны, может считаться недостатком. Другой недостаток образом ограничивает максимальный размер выделяемой памяти, что, с другой
состоит в том, что `free` и `destroy` у этого аллокатора работают только стороны, может считаться недостатком. Другой недостаток состоит в том,
с последним размещённым объектом (практически, как в стеке). что `free` и `destroy` у этого аллокатора работают только с последним
Попытка удаления не последнего объекта абсолютна безопасна, поскольку размещённым объектом (практически, как в стеке). Попытка удаления не
такое удаление просто ничего не делает. последнего объекта абсолютна безопасна, поскольку такое удаление просто
ничего не делает.
```zig ```zig
const std = @import("std"); const std = @import("std");

View File

@@ -424,9 +424,9 @@ pub fn main() !void {
## `anytype` ## `anytype`
Мы уже вскользь упоминали `anytype` в первой главе. Такой "тип" это Мы уже вскользь упоминали `anytype` в Главе I. Такой "тип" это весьма
весьма полезная форма утиной (неявной) типизации во время компиляции. полезная форма утиной (неявной) типизации во время компиляции. Вот
Вот простой логгер: простой логгер:
```zig ```zig
pub const Logger = struct { pub const Logger = struct {