From 688583650a4cfd18e0a0b2241b72632f21b6d6a2 Mon Sep 17 00:00:00 2001 From: Alexander Andreev Date: Fri, 16 Feb 2024 06:52:37 +0000 Subject: [PATCH 1/2] Translate ch04-02-references-and-borrowing.md via GitLocalize --- .../src/ch04-02-references-and-borrowing.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/rustbook-ru/src/ch04-02-references-and-borrowing.md b/rustbook-ru/src/ch04-02-references-and-borrowing.md index f8d0803a2..951f6a80a 100644 --- a/rustbook-ru/src/ch04-02-references-and-borrowing.md +++ b/rustbook-ru/src/ch04-02-references-and-borrowing.md @@ -32,7 +32,7 @@ {{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/src/main.rs:here}} ``` -Область действия `s` такая же, как и область действия любого параметра функции, но значение, на которое указывает ссылка, не удаляется, когда `s` перестаёт использоваться, потому что `s` не является его владельцем. Когда функции имеют ссылки в качестве параметров вместо фактических значений, нам не нужно возвращать значения, чтобы вернуть право владения, потому что мы никогда не владели ими. +The scope in which the variable `s` is valid is the same as any function parameter’s scope, but the value pointed to by the reference is not dropped when `s` stops being used, because `s` doesn’t have ownership. When functions have references as parameters instead of the actual values, we won’t need to return the values in order to give back ownership, because we never had ownership. Мы называем процесс создания ссылки *заимствованием*. Как и в реальной жизни, если человек чем-то владеет, вы можете это у него позаимствовать. Когда вы закончите, вы должны вернуть это законному владельцу. @@ -52,7 +52,7 @@ {{#include ../listings/ch04-understanding-ownership/listing-04-06/output.txt}} ``` -Как переменные неизменяемы по умолчанию, так и ссылки. Нам не разрешено изменять то, на что у нас есть ссылка. +Just as variables are immutable by default, so are references. We’re not allowed to modify something we have a reference to. ### Изменяемые ссылки @@ -64,7 +64,7 @@ {{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/src/main.rs}} ``` -Сначала мы меняем `s` на `mut`. Затем мы создаём изменяемую ссылку с помощью `&mut s`, у которой вызываем `change` и обновляем сигнатуру функции, чтобы принять изменяемую ссылку с помощью `some_string: &mut String`. Это даёт понять, что `change` изменит значение, которое заимствует. +First we change `s` to be `mut`. Then we create a mutable reference with `&mut s` where we call the `change` function, and update the function signature to accept a mutable reference with `some_string: &mut String`. This makes it very clear that the `change` function will mutate the value it borrows. Изменяемые ссылки имеют одно большое ограничение: если у вас есть изменяемая ссылка на значение, у вас не может быть других ссылок на это же значение. Код, который пытается создать две изменяемые ссылки на `s`, завершится ошибкой: @@ -82,7 +82,7 @@ Эта ошибка говорит о том, что код недействителен, потому что мы не можем заимствовать `s` как изменяемые более одного раза в один момент. Первое изменяемое заимствование находится в `r1` и должно длиться до тех пор, пока оно не будет использовано в `println!`, но между созданием этой изменяемой ссылки и её использованием мы попытались создать другую изменяемую ссылку в `r2`, которая заимствует те же данные, что и `r1`. -Ограничение, предотвращающее одновременное использование нескольких изменяемых ссылок на одни и те же данные, допускает изменение, но очень контролируемым образом. Это то, с чем борются новые Rustaceans, потому что большинство языков позволяют изменять значение в любой момент. Преимущество этого ограничения заключается в том, что Rust может предотвратить гонку данных во время компиляции. *Гонка данных* похожа на состояние гонки и происходит, когда возникают следующие три сценария: +The restriction preventing multiple mutable references to the same data at the same time allows for mutation but in a very controlled fashion. It’s something that new Rustaceans struggle with because most languages let you mutate whenever you’d like. The benefit of having this restriction is that Rust can prevent data races at compile time. A *data race* is similar to a race condition and happens when these three behaviors occur: - Два или больше указателей используют одни и те же данные в одно и то же время, - Минимум один указатель используется для записи данных, @@ -120,7 +120,7 @@ Rust применяет аналогичное правило для комби Области неизменяемых ссылок `r1` и `r2` заканчиваются после `println!` где они использовались в последний раз, то есть до создания изменяемой ссылки `r3`. Эти области не перекрываются, поэтому этот код разрешён: компилятор может сказать, что ссылка больше не используется в точке перед концом области. -Несмотря на то, что ошибки заимствования могут иногда вызывать разочарование, помните, что компилятор Rust заранее указывает на потенциальную ошибку (во время компиляции, а не во время выполнения) и точно показывает, в чем проблема. Тогда вам не придётся выяснять, почему ваши данные оказались не такими, как вы ожидали. +Even though borrowing errors may be frustrating at times, remember that it’s the Rust compiler pointing out a potential bug early (at compile time rather than at runtime) and showing you exactly where the problem is. Then you don’t have to track down why your data isn’t what you thought it was. ### Висячие ссылки @@ -140,14 +140,14 @@ Rust применяет аналогичное правило для комби {{#include ../listings/ch04-understanding-ownership/no-listing-14-dangling-reference/output.txt}} ``` -Это сообщение об ошибке относится к особенности языка, которую мы ещё не рассмотрели: времени жизни. Мы подробно обсудим времена жизни в главе 10. Но если вы не обращаете внимания на части, касающиеся времени жизни, сообщение будет содержать ключ к тому, почему этот код является проблемой: +This error message refers to a feature we haven’t covered yet: lifetimes. We’ll discuss lifetimes in detail in Chapter 10. But, if you disregard the parts about lifetimes, the message does contain the key to why this code is a problem: ```text this function's return type contains a borrowed value, but there is no value for it to be borrowed from ``` -Давайте подробнее рассмотрим, что именно происходит на каждом этапе нашего кода `dangle`: +Let’s take a closer look at exactly what’s happening at each stage of our `dangle` code: Файл: src/main.rs @@ -163,7 +163,7 @@ for it to be borrowed from {{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-16-no-dangle/src/main.rs:here}} ``` -Это работает без проблем. Владение перемещено, и ничего не освобождено. +This works without any problems. Ownership is moved out, and nothing is deallocated. ### Правила работы с ссылками @@ -173,5 +173,3 @@ for it to be borrowed from - Все ссылки должны быть действительными. В следующей главе мы рассмотрим другой тип ссылок — срезы. - - From 9ea03b719d7376476891ba4aae4352723094763d Mon Sep 17 00:00:00 2001 From: ? Date: Fri, 16 Feb 2024 06:52:38 +0000 Subject: [PATCH 2/2] Translate ch04-02-references-and-borrowing.md via GitLocalize --- .../src/ch04-02-references-and-borrowing.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/rustbook-ru/src/ch04-02-references-and-borrowing.md b/rustbook-ru/src/ch04-02-references-and-borrowing.md index 951f6a80a..f8d0803a2 100644 --- a/rustbook-ru/src/ch04-02-references-and-borrowing.md +++ b/rustbook-ru/src/ch04-02-references-and-borrowing.md @@ -32,7 +32,7 @@ {{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/src/main.rs:here}} ``` -The scope in which the variable `s` is valid is the same as any function parameter’s scope, but the value pointed to by the reference is not dropped when `s` stops being used, because `s` doesn’t have ownership. When functions have references as parameters instead of the actual values, we won’t need to return the values in order to give back ownership, because we never had ownership. +Область действия `s` такая же, как и область действия любого параметра функции, но значение, на которое указывает ссылка, не удаляется, когда `s` перестаёт использоваться, потому что `s` не является его владельцем. Когда функции имеют ссылки в качестве параметров вместо фактических значений, нам не нужно возвращать значения, чтобы вернуть право владения, потому что мы никогда не владели ими. Мы называем процесс создания ссылки *заимствованием*. Как и в реальной жизни, если человек чем-то владеет, вы можете это у него позаимствовать. Когда вы закончите, вы должны вернуть это законному владельцу. @@ -52,7 +52,7 @@ The scope in which the variable `s` is valid is the same as any function paramet {{#include ../listings/ch04-understanding-ownership/listing-04-06/output.txt}} ``` -Just as variables are immutable by default, so are references. We’re not allowed to modify something we have a reference to. +Как переменные неизменяемы по умолчанию, так и ссылки. Нам не разрешено изменять то, на что у нас есть ссылка. ### Изменяемые ссылки @@ -64,7 +64,7 @@ Just as variables are immutable by default, so are references. We’re not allow {{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/src/main.rs}} ``` -First we change `s` to be `mut`. Then we create a mutable reference with `&mut s` where we call the `change` function, and update the function signature to accept a mutable reference with `some_string: &mut String`. This makes it very clear that the `change` function will mutate the value it borrows. +Сначала мы меняем `s` на `mut`. Затем мы создаём изменяемую ссылку с помощью `&mut s`, у которой вызываем `change` и обновляем сигнатуру функции, чтобы принять изменяемую ссылку с помощью `some_string: &mut String`. Это даёт понять, что `change` изменит значение, которое заимствует. Изменяемые ссылки имеют одно большое ограничение: если у вас есть изменяемая ссылка на значение, у вас не может быть других ссылок на это же значение. Код, который пытается создать две изменяемые ссылки на `s`, завершится ошибкой: @@ -82,7 +82,7 @@ First we change `s` to be `mut`. Then we create a mutable reference with `&mut s Эта ошибка говорит о том, что код недействителен, потому что мы не можем заимствовать `s` как изменяемые более одного раза в один момент. Первое изменяемое заимствование находится в `r1` и должно длиться до тех пор, пока оно не будет использовано в `println!`, но между созданием этой изменяемой ссылки и её использованием мы попытались создать другую изменяемую ссылку в `r2`, которая заимствует те же данные, что и `r1`. -The restriction preventing multiple mutable references to the same data at the same time allows for mutation but in a very controlled fashion. It’s something that new Rustaceans struggle with because most languages let you mutate whenever you’d like. The benefit of having this restriction is that Rust can prevent data races at compile time. A *data race* is similar to a race condition and happens when these three behaviors occur: +Ограничение, предотвращающее одновременное использование нескольких изменяемых ссылок на одни и те же данные, допускает изменение, но очень контролируемым образом. Это то, с чем борются новые Rustaceans, потому что большинство языков позволяют изменять значение в любой момент. Преимущество этого ограничения заключается в том, что Rust может предотвратить гонку данных во время компиляции. *Гонка данных* похожа на состояние гонки и происходит, когда возникают следующие три сценария: - Два или больше указателей используют одни и те же данные в одно и то же время, - Минимум один указатель используется для записи данных, @@ -120,7 +120,7 @@ Rust применяет аналогичное правило для комби Области неизменяемых ссылок `r1` и `r2` заканчиваются после `println!` где они использовались в последний раз, то есть до создания изменяемой ссылки `r3`. Эти области не перекрываются, поэтому этот код разрешён: компилятор может сказать, что ссылка больше не используется в точке перед концом области. -Even though borrowing errors may be frustrating at times, remember that it’s the Rust compiler pointing out a potential bug early (at compile time rather than at runtime) and showing you exactly where the problem is. Then you don’t have to track down why your data isn’t what you thought it was. +Несмотря на то, что ошибки заимствования могут иногда вызывать разочарование, помните, что компилятор Rust заранее указывает на потенциальную ошибку (во время компиляции, а не во время выполнения) и точно показывает, в чем проблема. Тогда вам не придётся выяснять, почему ваши данные оказались не такими, как вы ожидали. ### Висячие ссылки @@ -140,14 +140,14 @@ Even though borrowing errors may be frustrating at times, remember that it’s t {{#include ../listings/ch04-understanding-ownership/no-listing-14-dangling-reference/output.txt}} ``` -This error message refers to a feature we haven’t covered yet: lifetimes. We’ll discuss lifetimes in detail in Chapter 10. But, if you disregard the parts about lifetimes, the message does contain the key to why this code is a problem: +Это сообщение об ошибке относится к особенности языка, которую мы ещё не рассмотрели: времени жизни. Мы подробно обсудим времена жизни в главе 10. Но если вы не обращаете внимания на части, касающиеся времени жизни, сообщение будет содержать ключ к тому, почему этот код является проблемой: ```text this function's return type contains a borrowed value, but there is no value for it to be borrowed from ``` -Let’s take a closer look at exactly what’s happening at each stage of our `dangle` code: +Давайте подробнее рассмотрим, что именно происходит на каждом этапе нашего кода `dangle`: Файл: src/main.rs @@ -163,7 +163,7 @@ Let’s take a closer look at exactly what’s happening at each stage of our `d {{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-16-no-dangle/src/main.rs:here}} ``` -This works without any problems. Ownership is moved out, and nothing is deallocated. +Это работает без проблем. Владение перемещено, и ничего не освобождено. ### Правила работы с ссылками @@ -173,3 +173,5 @@ This works without any problems. Ownership is moved out, and nothing is dealloca - Все ссылки должны быть действительными. В следующей главе мы рассмотрим другой тип ссылок — срезы. + +