From 8bcdef3738f72eea2c7e73e4ae535152867cf6cd Mon Sep 17 00:00:00 2001 From: zed Date: Fri, 24 Nov 2023 00:00:27 +0300 Subject: [PATCH] On branch main modified: src/ch04.md modified: src/ch06.md modified: src/ch09.md --- src/ch04.md | 4 ++-- src/ch06.md | 21 +++++++++++---------- src/ch09.md | 6 +++--- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/ch04.md b/src/ch04.md index 14bf0a1..dd65242 100644 --- a/src/ch04.md +++ b/src/ch04.md @@ -10,7 +10,7 @@ использования памяти компьютера. Если вы свободно обращаетесь с указателями, динамическим выделением/освобождением памяти, понимаете, что такое "висячий" указатель (dangling pointer), тогда вы можете пропустить -пару глав и перейти к главе 6, там есть некоторые особенности, +пару глав и перейти к Главе VI, там есть некоторые особенности, специфичные для Zig. В следующем примере создаётся пользователь с идентификатором 1 и "силой" @@ -50,7 +50,7 @@ src/ex-ch04-01.zig:16:16: error: cannot assign to constant ~~~~~~~~~~~^~~~ ``` -Мы уже знаем из главы 1, что параметры функций являются константами +Мы уже знаем из Главы I, что параметры функций являются константами и поэтому инструкция `user.power += 1;` некорректна. Чтобы исправить эту ошибку компиляции, мы могли бы написать что-то вроде diff --git a/src/ch06.md b/src/ch06.md index f066cb8..d8d0251 100644 --- a/src/ch06.md +++ b/src/ch06.md @@ -757,16 +757,17 @@ defer list.deinit(); ## Распределитель с фиксированным буфером -Последний аллокатор, который мы изучим, это `std.heap.FixedBufferAllocator`, -который выделяет место под объекты в буфере (то есть в `[]u8`), который -ему предоставляется при инициализации. У этого аллокатора есть два главных преимущества. -Во-первых, поскольку память уже выделена заранее, это быстро. Во-вторых, -он естественным образом ограничивает максимальный размер выделяемой памяти, -что, с другой стороны, может считаться недостатком. Другой недостаток -состоит в том, что `free` и `destroy` у этого аллокатора работают только -с последним размещённым объектом (практически, как в стеке). -Попытка удаления не последнего объекта абсолютна безопасна, поскольку -такое удаление просто ничего не делает. +Последний аллокатор, который мы изучим, это +`std.heap.FixedBufferAllocator`, который выделяет место под объекты в +буфере (то есть в `[]u8`), который ему предоставляется при инициализации. +У этого аллокатора есть два главных преимущества. Во-первых, поскольку +память уже выделена заранее, это быстро. Во-вторых, он естественным +образом ограничивает максимальный размер выделяемой памяти, что, с другой +стороны, может считаться недостатком. Другой недостаток состоит в том, +что `free` и `destroy` у этого аллокатора работают только с последним +размещённым объектом (практически, как в стеке). Попытка удаления не +последнего объекта абсолютна безопасна, поскольку такое удаление просто +ничего не делает. ```zig const std = @import("std"); diff --git a/src/ch09.md b/src/ch09.md index a7150f9..b1a7908 100644 --- a/src/ch09.md +++ b/src/ch09.md @@ -424,9 +424,9 @@ pub fn main() !void { ## `anytype` -Мы уже вскользь упоминали `anytype` в первой главе. Такой "тип" это -весьма полезная форма утиной (неявной) типизации во время компиляции. -Вот простой логгер: +Мы уже вскользь упоминали `anytype` в Главе I. Такой "тип" это весьма +полезная форма утиной (неявной) типизации во время компиляции. Вот +простой логгер: ```zig pub const Logger = struct {