Skip to content

Commit f911ced

Browse files
authored
данни, поглъщане, преместване и т.н. (#54)
1 parent 61f86d3 commit f911ced

File tree

15 files changed

+87
-79
lines changed

15 files changed

+87
-79
lines changed

book.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ editor = "ace"
99
line-numbers = true
1010

1111
[output.html.fold]
12-
enable = true
12+
enable = false
1313

1414
[output.html]
1515
git-repository-url = "https://github.com/kberov/rust-by-example-bg"

src/SUMMARY.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
- [Параметри от призрачен тип](generics/phantom.md)
100100
- [Проверка: разясняване на единичния тип](generics/phantom/testcase_units.md)
101101
- [Правила за обхват](scope.md)
102-
- [ПИИ](scope/raii.md)
102+
- [ПДИ](scope/raii.md)
103103
- [Владение и премествания](scope/move.md)
104104
- [Менѝмост](scope/move/mut.md)
105105
- [Частични премествания](scope/move/partial_move.md)

src/cargo.md

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
изчерпателна документация в [Книгата за
1414
Cargo](https://doc.rust-lang.org/cargo/).
1515

16+
## Б. пр.
17+
1618
[^cargo]: товар, карго – cargo
1719

1820
[^official]: представителното – official

src/crates.md

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Кошове[^crates]
1+
# Кошове
22

3-
Кошът е компилационна единица в Ръждьо. Когато изпълните на командния ред
3+
*Кошът*[^crates] е компилационна единица в Ръждьо. Когато изпълните на командния ред
44
`rustc some_file.rs`, `some_file.rs` се смята за *главния файл в коша*. Ако
55
`some_file.rs` има в себе си обявление `mod`, съдържанието на файловете в модула
66
ще бъдат вмъкнати на местата, където са обявленията `mod`, *преди* компилаторът
@@ -11,4 +11,6 @@
1111
подразбиране `rustc` ще произведе изпълним файл от коша. Това поведение може да
1212
бъде променено, като се подаде флага `--crate-type` със стойност `lib`.
1313

14-
[^crates]: кошове – crates (б. пр.)
14+
## Б. пр.
15+
16+
[^crates]: кошове – crates

src/error/panic.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# `panic`
22

3-
Най-простата обработка на грешки е `panic`. Този макрос отпечатва съобщение за
4-
грешка, започва да размотава стека и обикновено прекратява програмата. Тук
3+
Най-простата обработка на грешки е `panic`. Този макрос извежда съобщение за
4+
грешка, започва да размотава стълпа и обикновено прекратява програмата. Тук
55
изрично извикваме `panic` при нашето условие за грешка:
66

77
```rust,editable,ignore,mdbook-runnable

src/flow_control/for.md

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Превъртане чрез `for`
1+
# `for`
22

33
## for и range
44

@@ -78,8 +78,8 @@ fn main() {
7878
}
7979
```
8080

81-
* `into_iter` *употребява и поглъща*[^consumes] сбирката, така че на всяка стъпка имаме на
82-
разположение самата стойност. След употребата сбирката повече не може да се
81+
* `into_iter` *поглъща*[^consumes] сбирката, така че на всяка стъпка имаме на
82+
разположение самата стойност. След поглъщането сбирката повече не може да се
8383
ползва, понеже бива *преместена*[^moved] вътре в цикъла.
8484
```rust,editable,ignore,mdbook-runnable
8585
fn main() {
@@ -129,8 +129,12 @@ fn main() {
129129

130130
[^borrows]: заема, взема на заем – borrows
131131

132-
[^consumes]: поглъща – consumes. Употребява и поглъща (параметри, поредица, сбирка и т.н.)
133-
– consumes (parameters, array, collection etc.)
132+
[^consumes]: поглъща – consumes. Поглъща (параметри, поредица, сбирка и т.н.) –
133+
consumes (parameters, array, collection etc.). Сиреч, стойността от
134+
променливата бива изядена (буквално), така че първоначалната променлива не
135+
може повече да бъде използвана. След поглъщането на преместените в новата
136+
променлива данни, при излизане на променливата от обхват паметта бива
137+
освободена.
134138

135139
[^moved]: преместен – moved. Виж [Собственост и премествания][move]
136140

src/fn/closures/capture.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ fn main() {
8080
mem::drop(movable);
8181
};
8282
83-
// `consume` изяжда променливата, затова може да бъде извикана само веднъж.
83+
// `consume` *поглъща* променливата, затова може да бъде извикана само веднъж.
8484
consume();
8585
// consume();
8686
// ^ ЗАДАЧА: разкоментирайте този ред.

src/fn/methods.md

+6-11
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ impl Rectangle {
3838
// `&self` е краткопис за `self: &Self`, където `Self` е прякор за типа на
3939
// извикващия обект. В този случай `Self` = `Rectangle`
4040
fn area(&self) -> f64 {
41-
// `self` дава достъп до полетата на структурата чрез оператора точка
41+
// `self` предоставя достъп до полетата на структурата
42+
// чрез оператора точка (.).
4243
let Point { x: x1, y: y1 } = self.p1;
4344
let Point { x: x2, y: y2 } = self.p2;
4445
@@ -66,11 +67,11 @@ impl Rectangle {
6667
}
6768
}
6869
69-
// `Pair` притежава ресурси: две цели числа, намиращи се в динамичната памет
70+
// `Pair` владее данни: две цели числа, намиращи се в динамичната памет
7071
struct Pair(Box<i32>, Box<i32>);
7172
7273
impl Pair {
73-
// Този метод „употребява” ресурсите на извикващия обект
74+
// Този метод *поглъща* данните на извикващия обект
7475
// Дългото изписване на `self` е `self: Self`
7576
fn destroy(self) {
7677
// Разлагаме `self`
@@ -79,7 +80,7 @@ impl Pair {
7980
println!("Pair({}, {}) бива разрушен…", first, second);
8081
8182
// `first` и `second` излизат от обхват и паметта, която са заемали,
82-
// е освободена
83+
// бива освободена.
8384
}
8485
}
8586
@@ -112,14 +113,8 @@ fn main() {
112113
113114
pair.destroy();
114115
115-
// Грешка! Предишното извикване на `destroy` „употреби“ `pair`
116+
// Грешка! Предишното извикване на `destroy` *погълна* `pair`
116117
//pair.destroy();
117118
// ЗАДАЧА ^ Разкоментирайте този ред
118119
}
119120
```
120-
121-
## Б. пр.
122-
123-
consumes – употребява (сиреч изяжда (буквално), така че
124-
променливата не може повече да бъде използвана. След употребата паметта, заемана от
125-
променливата, бива освободена.)

src/mod/use.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ fn main() {
1515
}
1616
```
1717

18-
Може да използвате ключовата дума `as`, за да обвържете внасяния[^imports] с
18+
Може да използвате ключовата дума `as`, за да обвържете *внасяния*[^imports] с
1919
нови имена:
2020

2121
```rust,editable
@@ -55,4 +55,6 @@ fn main() {
5555
}
5656
```
5757

58-
[^imports]: внасяне (на имена (модули и функции)) в текущия блок (код или файл) на обхват (б.пр.)
58+
## Б. пр.
59+
60+
[^imports]: внасяне – import. Внасяне (на имена (модули и функции)) в текущия обхват (код или файл).

src/mod/visibility.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ mod my_mod {
7373
mod private_nested {
7474
#[allow(dead_code)]
7575
pub fn function() {
76-
println!("извикавхме `my_mod::private_nested::function()`");
76+
println!("извикахме `my_mod::private_nested::function()`");
7777
}
7878
7979
// Частните родителски единици продължават да ограничават видимостта на

src/scope/move.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# Владение и премествания
22

33
Понеже променливите сами се грижат за освобождаване на заетата от тях част от
4-
паметта, **ресурсите могат да имат само един владелец (собственик)**. Това също
5-
предотвратява възможността даден ресурс да бъде освободен повече от веднъж.
6-
Обърнете внимание, че не всички променливи владеят ресурси (препратките са
4+
паметта, **данните могат да имат само един владелец (собственик)**. Това също
5+
предотвратява възможността дадено парче данни да бъде освободено повече от веднъж.
6+
Обърнете внимание, че не всички променливи владеят данни (препратките са
77
такива променливи).
88

99
Когато присвояваме стойност на променлива (`let x = y`) или подаваме аргументи
10-
като стойност (не като препратка) (`foo(x)`), *владението* на ресурса бива
10+
като стойност (не като препратка) (`foo(x)`), *владението* на данните бива
1111
предадено на функцията. Казано по ръждьовски, това е *преместване*[^move].
1212

1313
След преместването предишният владелец (променлива) повече не може да бъде
@@ -22,16 +22,16 @@ fn destroy_box(c: Box<i32>) {
2222
}
2323
2424
fn main() {
25-
// Паметта за това число е заделена в стека
25+
// Паметта за това число е заделена в стълпа.
2626
let x = 5u32;
2727
28-
// *Копираме* `x` в `y` – няма преместване на ресурси
28+
// *Копираме* `x` в `y` – няма преместване на данни.
2929
let y = x;
3030
31-
// И двете стойности могат да се ползват независимо една от друга
31+
// И двете стойности могат да се ползват независимо една от друга.
3232
println!("x е {}, а y е {}", x, y);
3333
34-
// `a` е указател към цяло число от _купа̀_
34+
// `a` е указател към цяло число от купа̀.
3535
let a = Box::new(5i32);
3636
3737
println!("a съдържа: {}", a);
@@ -40,7 +40,7 @@ fn main() {
4040
let b = a;
4141
// Адресът на указателя на `a` е копиран (не самите данни) в `b`.
4242
// И двете променливи сега са указатели към едни и същи данни, заделени в
43-
// купа, но сега `b` притежава/владее данните.
43+
// купа, но сега `b` *владее* данните.
4444
4545
// Грешка! `a` повече няма достъп до данните, понеже вече не владее тези
4646
// данни от купа.
@@ -60,7 +60,7 @@ fn main() {
6060
```
6161
## Б. пр.
6262

63-
[^move]: местене, преместване, движение – move
63+
[^move]: местене, преместване на данни (от една променлива в друга) – move
6464

6565
[^dangling]: висящ указател – dangling pointer
6666

src/scope/move/partial_move.md

+19-16
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
# Частични премествания
22

3-
При [разлагането][destructuring][^destructuring] на отделна променлива чрез
4-
преместване и като препратка може да се ползва _обвързване (на променливи) по
5-
образец_[^pattern_binding]. От това може да последва _частично преместване_ на
6-
променливата, което означава, че част от променливата е преместена, а друга не
7-
е. В този случай изходната променлива не може да бъде използвана като цяло.
8-
Само частите, които са присвоени на нови променливи като препратки, могат да
9-
бъдат използвани.
3+
_Обвързване (на променливи) по образец_[^pattern_binding] може да се ползва за
4+
[разлагане в отделни променливи][destructuring][^destructuring] чрез
5+
_преместване_ на части от съставната променлива. Едновременно с това части от
6+
променливата могат да се разложат в други променливи чрез _създаване на
7+
препратки_ към тези части. Това може да доведе до _частично преместване_ на
8+
данните от променливата, което означава, че част от данните в променливата са
9+
преместени, а други части не са. В този случай изходната променлива вече не
10+
може да бъде използвана като едно цяло. Само частите, които са присвоени на
11+
нови променливи като препратки, могат да бъдат използвани повторно.
1012

1113
```rust,editable
1214
fn main() {
@@ -29,16 +31,17 @@ fn main() {
2931
3032
println!("The person's name is {}", name);
3133
32-
// Грешка! заемка на частично преместена стойност: `person`. Случва се
33-
// частично преместване
34+
// Грешка! заемка на частично преместена стойност: `person`. Случило се е
35+
// частично преместване.
3436
//println!("The person struct is {:?}", person);
3537
36-
// `person` не може да се ползва, но `person.age` може, понеже нейната стойност
37-
// не е преместена
38+
// `person` не може да се ползва като цяло, но частта `person.age` може,
39+
// понеже нейната стойност не е преместена.
3840
println!("The person's age from person struct is {}", person.age);
3941
}
4042
4143
```
44+
4245
(В този пример съхраняваме стойността на променливата `age` в купа̀, за да
4346
онагледим частичното преместване. Ако изтрием `ref` от кода по-горе,
4447
компилаторът ще върне грешка, тъй като владението на `person.age` ще бъде
@@ -48,14 +51,14 @@ fn main() {
4851

4952
## Б. пр.
5053

51-
[^destructuring]: разлагане – destructuring
52-
53-
[^pattern_binding]: обвързване по образец (при разлагане на структура) – pattern binding.
54+
[^destructuring]: разлагане – destructuring. Съставните променливи могат да
55+
бъдат разложени на съставните им части, като всяка част отиде в отделна
56+
променлива.
5457

55-
_ЗАДАЧА за прев.!: Да прегледам другите преводи на `pattern`, за да видя дали „образец”
56-
е подходящ превод и за другите случаи. Да отбележа превода в Б.Пр._
58+
[^pattern_binding]: обвързване по образец (при разлагане на структура) – pattern binding
5759

5860
### Вижте също:
61+
5962
[Разлагане][destructuring]
6063

6164
[destructuring]: ../../flow_control/match/destructuring.md

0 commit comments

Comments
 (0)