On branch main

modified:   src/ch02.md
modified:   src/ch04.md
modified:   src/ch05.md
This commit is contained in:
zed
2023-11-21 11:34:52 +03:00
parent 30a4c246d8
commit 3aa498f070
3 changed files with 19 additions and 20 deletions

View File

@@ -461,10 +461,10 @@ if (home) |h| {
по умолчанию или для возврата из функции, например:
```zig
// если h == null, будет "unknown"
const h = home orelse "unknown"
// or maybe
// exit our function
// выход из функции если h == null
const h = home orelse return;
```
@@ -659,7 +659,7 @@ try action(req, res);
так:
```zig
// load the last saved game
// загружаем последнюю сохранённую игру
pub fn loadLast() !?Save {
// TODO
return null;
@@ -675,7 +675,6 @@ pub fn loadLast() !?Save {
const std = @import("std");
pub fn main() void {
// This is the line you want to focus on
const save = (try Save.loadLast()) orelse Save.blank();
std.debug.print("{any}\n", .{save});
}

View File

@@ -26,7 +26,7 @@ pub fn main() void {
.power = 100,
};
// this line has been added
// добавленная строчка
levelUp(user);
std.debug.print("Пользователь {d} обладает силой {d}\n", .{user.id, user.power});
}
@@ -103,7 +103,7 @@ user -> ------------ (id)
объявим так называемую упакованную структуру (`packed struct`). Тем не
менее, наша визуализация переменной `user` вполне разумна и полезна.
Вот несколько иная визуализация, тут включены адреса ячеек памяти:
Вот несколько иная визуализация, тут добавлены адреса ячеек памяти:
```
user -> ------------ (id: 1043368d0)
@@ -178,7 +178,7 @@ pub fn main() void {
.power = 100,
};
// added this
// добавили это
std.debug.print("main: {*}\n", .{&user});
levelUp(user);
@@ -186,7 +186,7 @@ pub fn main() void {
}
fn levelUp(user: User) void {
// add this
// добавили это
std.debug.print("levelUp: {*}\n", .{&user});
var u = user;
u.power += 1;
@@ -337,7 +337,7 @@ user -> ------------- (*User) |
-------------
```
Внутри функции `levelUP` `user` это указатель на структуру `User`.
Внутри функции `levelUp` `user` это указатель на структуру `User`.
Значение этого параметра это адрес переменной `main.user`. Но это не
просто адрес, это ещё и тип (`*User`). Не имеет значения, говорим ли об
указателях или нет - переменные связывают информацию о типе с адресом.

View File

@@ -1,17 +1,17 @@
# Стековая память
Рассмотрение указателей в предыдущей ознакомило нас с взаимосвязью между
переменными, данными и памятью. Но нам ещё нужно поговорить о том, как
происходит управление ланными и памятью. Для коротко-живущих и простых
скриптов это, как правило, не имеет особого значения. В наше время, имея
ноутбук, оснащённый 32-мя гигабайтами оперативной памяти, вы можете
запустить свою программу, которая, делая какую-то работу (например,
прочитать файл), может запросто использовать несколько сотен мегабайт
памяти, сделать что-то потрясающее и далее выйти. По выходу операционная
система освобождает все ресурсы (память, в частности), которые были
исопльзованы программойЮ пока она выполнялась. Освобожденная память затем
может быть отдана в пользование другим программам.
Рассмотрение указателей в предыдущей главе ознакомило нас с взаимосвязью
между переменными, данными и памятью. Но нам ещё нужно поговорить о том,
как происходит управление ланными и памятью. Для коротко-живущих и
простых скриптов это, как правило, не имеет особого значения. В наше
время, имея ноутбук, оснащённый 32-мя гигабайтами оперативной памяти, вы
можете запустить свою программу, которая, делая какую-то работу
(например, прочитать файл), может запросто использовать несколько сотен
мегабайт памяти, сделать что-то потрясающее и далее выйти. По выходу
операционная система освобождает все ресурсы (память, в частности),
которые были исопльзованы программойЮ пока она выполнялась. Освобожденная
память затем может быть отдана в пользование другим программам.
Однако, для программ, которые работают днями, месяцами и даже годами,
память становится ограниченным и весьма ценным ресурсом, который нужен