From af5bfe1f708f4c0da733e00d26a90d76014f178e Mon Sep 17 00:00:00 2001 From: Ivan B <4rusxg@gmail.com> Date: Sun, 7 Jan 2024 15:00:55 +0000 Subject: [PATCH 1/5] Translate ch10-01-syntax.md via GitLocalize --- rustbook-ru/src/ch10-01-syntax.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/rustbook-ru/src/ch10-01-syntax.md b/rustbook-ru/src/ch10-01-syntax.md index 400e9bc83..5e22b7c38 100644 --- a/rustbook-ru/src/ch10-01-syntax.md +++ b/rustbook-ru/src/ch10-01-syntax.md @@ -8,7 +8,7 @@ Рассмотрим пример с функцией `largest`. Листинг 10-4 показывает две функции, каждая из которых находит самое большое значение в срезе своего типа. Позже мы объединим их в одну функцию, использующую обобщённые типы данных. -Файл: src/main.rs +Файл : src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/src/main.rs:here}} @@ -30,7 +30,7 @@ fn largest(list: &[T]) -> &T { Листинг 10-5 показывает определение функции `largest` с использованием обобщённых типов данных в её сигнатуре. Листинг также показывает, как мы можем вызвать функцию со срезом данных типа `i32` или `char`. Данный код пока не будет компилироваться, но мы исправим это к концу раздела. -Файл: src/main.rs +Файл : src/main.rs ```rust,ignore,does_not_compile {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/src/main.rs}} @@ -50,7 +50,7 @@ fn largest(list: &[T]) -> &T { Мы также можем определить структуры, использующие обобщённые типы в одном или нескольких своих полях, с помощью синтаксиса `<>`. Листинг 10-6 показывает, как определить структуру `Point`, чтобы хранить поля координат `x` и `y` любого типа данных. -Файл: src/main.rs +Файл : src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/src/main.rs}} @@ -62,13 +62,13 @@ fn largest(list: &[T]) -> &T { Так как мы используем только один обобщённый тип данных для определения структуры `Point`, это определение означает, что структура `Point` является обобщённой с типом `T`, и оба поля `x` и y имеют одинаковый тип, каким бы он не являлся. Если мы создадим экземпляр структуры `Point` со значениями разных типов, как показано в листинге 10-7, наш код не скомпилируется. -Файл: src/main.rs +Файл : src/main.rs ```rust,ignore,does_not_compile {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/src/main.rs}} ``` -Листинг 10-7: поля x и y должны быть одного типа, так как они имеют один и тот же обобщённый тип T +Listing 10-7: The fields x and y must be the same type because both have the same generic data type T. В этом примере, когда мы присваиваем целочисленное значение 5 переменной `x` , мы сообщаем компилятору, что обобщённый тип `T` будет целым числом для этого экземпляра `Point`. Затем, когда мы указываем значение 4.0 (имеющее тип, отличный от целого числа) для `y`, который по нашему определению должен иметь тот же тип, что и `x`, мы получим ошибку несоответствия типов: @@ -78,7 +78,7 @@ fn largest(list: &[T]) -> &T { Чтобы определить структуру `Point`, где оба значения `x` и `y` являются обобщёнными, но различными типами, можно использовать несколько параметров обобщённого типа. Например, в листинге 10-8 мы изменим определение `Point` таким образом, чтобы оно использовало обобщённые типы `T` и `U`, где `x` имеет тип `T` а `y` имеет тип `U`. -Файл: src/main.rs +Filename: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/src/main.rs}} @@ -118,7 +118,7 @@ enum Result { Мы можем реализовать методы для структур и перечислений (как мы делали в главе 5) и в определениях этих методов также использовать обобщённые типы. В листинге 10-9 показана структура `Point`, которую мы определили в листинге 10-6, с добавленным для неё методом `x`. -Файл: src/main.rs +Filename: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/src/main.rs}} @@ -132,7 +132,7 @@ enum Result { Мы можем также указать ограничения, какие обобщённые типы разрешено использовать при определении методов. Например, мы могли бы реализовать методы только для экземпляров типа `Point`, а не для экземпляров `Point`, в которых используется произвольный обобщённый тип. В листинге 10-10 мы используем конкретный тип `f32`, что означает, что мы не определяем никакие типы после `impl`. -Файл: src/main.rs +Filename: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/src/main.rs:here}} @@ -144,7 +144,7 @@ enum Result { Параметры обобщённого типа, которые мы используем в определении структуры, не всегда совпадают с аналогами, использующимися в сигнатурах методов этой структуры. Чтобы пример был более очевидным, в листинге 10-11 используются обобщённые типы `X1` и `Y1` для определения структуры `Point` и типы `X2` `Y2` для сигнатуры метода `mixup`. Метод создаёт новый экземпляр структуры `Point`, где значение `x` берётся из `self` `Point` (имеющей тип `X1`), а значение `y` - из переданной структуры `Point` (где эта переменная имеет тип `Y2`). -Файл: src/main.rs +Filename: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/src/main.rs}} @@ -173,7 +173,7 @@ let float = Some(5.0); Мономорфизированная версия кода выглядит примерно так (компилятор использует имена, отличные от тех, которые мы используем здесь для иллюстрации): -Файл: src/main.rs +Filename: src/main.rs ```rust enum Option_i32 { @@ -193,5 +193,3 @@ fn main() { ``` Обобщённое `Option` заменяется конкретными определениями, созданными компилятором. Поскольку Rust компилирует обобщённый код в код, определяющий тип в каждом экземпляре, мы не платим за использование обобщённых типов во время выполнения. Когда код запускается, он работает точно так же, как если бы мы продублировали каждое определение вручную. Процесс мономорфизации делает обобщённые типы Rust чрезвычайно эффективными во время выполнения. - - From 9fd140bbda27f10705780190b78793e6f43ce18e Mon Sep 17 00:00:00 2001 From: funkill Date: Sun, 7 Jan 2024 15:00:55 +0000 Subject: [PATCH 2/5] Translate ch10-01-syntax.md via GitLocalize --- rustbook-ru/src/ch10-01-syntax.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rustbook-ru/src/ch10-01-syntax.md b/rustbook-ru/src/ch10-01-syntax.md index 5e22b7c38..9e8da9587 100644 --- a/rustbook-ru/src/ch10-01-syntax.md +++ b/rustbook-ru/src/ch10-01-syntax.md @@ -68,7 +68,7 @@ fn largest(list: &[T]) -> &T { {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/src/main.rs}} ``` -Listing 10-7: The fields x and y must be the same type because both have the same generic data type T. +Листинг 10-7: поля x и y должны быть одного типа, так как они имеют один и тот же обобщённый тип T В этом примере, когда мы присваиваем целочисленное значение 5 переменной `x` , мы сообщаем компилятору, что обобщённый тип `T` будет целым числом для этого экземпляра `Point`. Затем, когда мы указываем значение 4.0 (имеющее тип, отличный от целого числа) для `y`, который по нашему определению должен иметь тот же тип, что и `x`, мы получим ошибку несоответствия типов: From d0a332c27781b13c0ef3caa67a9988e22f210dc9 Mon Sep 17 00:00:00 2001 From: Yuriy Larin Date: Sun, 7 Jan 2024 15:00:56 +0000 Subject: [PATCH 3/5] Translate ch10-01-syntax.md via GitLocalize From 91f19188b8a81c72d6ecc0f9a90cdaf62e8f2534 Mon Sep 17 00:00:00 2001 From: jashka34 Date: Sun, 7 Jan 2024 15:00:56 +0000 Subject: [PATCH 4/5] Translate ch10-01-syntax.md via GitLocalize --- rustbook-ru/src/ch10-01-syntax.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/rustbook-ru/src/ch10-01-syntax.md b/rustbook-ru/src/ch10-01-syntax.md index 9e8da9587..4940f8902 100644 --- a/rustbook-ru/src/ch10-01-syntax.md +++ b/rustbook-ru/src/ch10-01-syntax.md @@ -78,7 +78,7 @@ fn largest(list: &[T]) -> &T { Чтобы определить структуру `Point`, где оба значения `x` и `y` являются обобщёнными, но различными типами, можно использовать несколько параметров обобщённого типа. Например, в листинге 10-8 мы изменим определение `Point` таким образом, чтобы оно использовало обобщённые типы `T` и `U`, где `x` имеет тип `T` а `y` имеет тип `U`. -Filename: src/main.rs +Файл : src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/src/main.rs}} @@ -118,7 +118,7 @@ enum Result { Мы можем реализовать методы для структур и перечислений (как мы делали в главе 5) и в определениях этих методов также использовать обобщённые типы. В листинге 10-9 показана структура `Point`, которую мы определили в листинге 10-6, с добавленным для неё методом `x`. -Filename: src/main.rs +Файл : src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/src/main.rs}} @@ -132,7 +132,7 @@ enum Result { Мы можем также указать ограничения, какие обобщённые типы разрешено использовать при определении методов. Например, мы могли бы реализовать методы только для экземпляров типа `Point`, а не для экземпляров `Point`, в которых используется произвольный обобщённый тип. В листинге 10-10 мы используем конкретный тип `f32`, что означает, что мы не определяем никакие типы после `impl`. -Filename: src/main.rs +Файл : src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/src/main.rs:here}} @@ -144,7 +144,7 @@ enum Result { Параметры обобщённого типа, которые мы используем в определении структуры, не всегда совпадают с аналогами, использующимися в сигнатурах методов этой структуры. Чтобы пример был более очевидным, в листинге 10-11 используются обобщённые типы `X1` и `Y1` для определения структуры `Point` и типы `X2` `Y2` для сигнатуры метода `mixup`. Метод создаёт новый экземпляр структуры `Point`, где значение `x` берётся из `self` `Point` (имеющей тип `X1`), а значение `y` - из переданной структуры `Point` (где эта переменная имеет тип `Y2`). -Filename: src/main.rs +Файл : src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/src/main.rs}} @@ -173,7 +173,7 @@ let float = Some(5.0); Мономорфизированная версия кода выглядит примерно так (компилятор использует имена, отличные от тех, которые мы используем здесь для иллюстрации): -Filename: src/main.rs +Файл : src/main.rs ```rust enum Option_i32 { @@ -193,3 +193,5 @@ fn main() { ``` Обобщённое `Option` заменяется конкретными определениями, созданными компилятором. Поскольку Rust компилирует обобщённый код в код, определяющий тип в каждом экземпляре, мы не платим за использование обобщённых типов во время выполнения. Когда код запускается, он работает точно так же, как если бы мы продублировали каждое определение вручную. Процесс мономорфизации делает обобщённые типы Rust чрезвычайно эффективными во время выполнения. + + From 3e07432c868ea7acdda5daffee74225ca18b3113 Mon Sep 17 00:00:00 2001 From: Alexander Andreev Date: Sun, 7 Jan 2024 15:02:46 +0000 Subject: [PATCH 5/5] Translate ch10-01-syntax.md via GitLocalize --- rustbook-ru/src/ch10-01-syntax.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/rustbook-ru/src/ch10-01-syntax.md b/rustbook-ru/src/ch10-01-syntax.md index 4940f8902..400e9bc83 100644 --- a/rustbook-ru/src/ch10-01-syntax.md +++ b/rustbook-ru/src/ch10-01-syntax.md @@ -8,7 +8,7 @@ Рассмотрим пример с функцией `largest`. Листинг 10-4 показывает две функции, каждая из которых находит самое большое значение в срезе своего типа. Позже мы объединим их в одну функцию, использующую обобщённые типы данных. -Файл : src/main.rs +Файл: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/src/main.rs:here}} @@ -30,7 +30,7 @@ fn largest(list: &[T]) -> &T { Листинг 10-5 показывает определение функции `largest` с использованием обобщённых типов данных в её сигнатуре. Листинг также показывает, как мы можем вызвать функцию со срезом данных типа `i32` или `char`. Данный код пока не будет компилироваться, но мы исправим это к концу раздела. -Файл : src/main.rs +Файл: src/main.rs ```rust,ignore,does_not_compile {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/src/main.rs}} @@ -50,7 +50,7 @@ fn largest(list: &[T]) -> &T { Мы также можем определить структуры, использующие обобщённые типы в одном или нескольких своих полях, с помощью синтаксиса `<>`. Листинг 10-6 показывает, как определить структуру `Point`, чтобы хранить поля координат `x` и `y` любого типа данных. -Файл : src/main.rs +Файл: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/src/main.rs}} @@ -62,7 +62,7 @@ fn largest(list: &[T]) -> &T { Так как мы используем только один обобщённый тип данных для определения структуры `Point`, это определение означает, что структура `Point` является обобщённой с типом `T`, и оба поля `x` и y имеют одинаковый тип, каким бы он не являлся. Если мы создадим экземпляр структуры `Point` со значениями разных типов, как показано в листинге 10-7, наш код не скомпилируется. -Файл : src/main.rs +Файл: src/main.rs ```rust,ignore,does_not_compile {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/src/main.rs}} @@ -78,7 +78,7 @@ fn largest(list: &[T]) -> &T { Чтобы определить структуру `Point`, где оба значения `x` и `y` являются обобщёнными, но различными типами, можно использовать несколько параметров обобщённого типа. Например, в листинге 10-8 мы изменим определение `Point` таким образом, чтобы оно использовало обобщённые типы `T` и `U`, где `x` имеет тип `T` а `y` имеет тип `U`. -Файл : src/main.rs +Файл: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/src/main.rs}} @@ -118,7 +118,7 @@ enum Result { Мы можем реализовать методы для структур и перечислений (как мы делали в главе 5) и в определениях этих методов также использовать обобщённые типы. В листинге 10-9 показана структура `Point`, которую мы определили в листинге 10-6, с добавленным для неё методом `x`. -Файл : src/main.rs +Файл: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/src/main.rs}} @@ -132,7 +132,7 @@ enum Result { Мы можем также указать ограничения, какие обобщённые типы разрешено использовать при определении методов. Например, мы могли бы реализовать методы только для экземпляров типа `Point`, а не для экземпляров `Point`, в которых используется произвольный обобщённый тип. В листинге 10-10 мы используем конкретный тип `f32`, что означает, что мы не определяем никакие типы после `impl`. -Файл : src/main.rs +Файл: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/src/main.rs:here}} @@ -144,7 +144,7 @@ enum Result { Параметры обобщённого типа, которые мы используем в определении структуры, не всегда совпадают с аналогами, использующимися в сигнатурах методов этой структуры. Чтобы пример был более очевидным, в листинге 10-11 используются обобщённые типы `X1` и `Y1` для определения структуры `Point` и типы `X2` `Y2` для сигнатуры метода `mixup`. Метод создаёт новый экземпляр структуры `Point`, где значение `x` берётся из `self` `Point` (имеющей тип `X1`), а значение `y` - из переданной структуры `Point` (где эта переменная имеет тип `Y2`). -Файл : src/main.rs +Файл: src/main.rs ```rust {{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/src/main.rs}} @@ -173,7 +173,7 @@ let float = Some(5.0); Мономорфизированная версия кода выглядит примерно так (компилятор использует имена, отличные от тех, которые мы используем здесь для иллюстрации): -Файл : src/main.rs +Файл: src/main.rs ```rust enum Option_i32 {