From 7fa14031d241abac1f2dc6579af396564bd8fabc Mon Sep 17 00:00:00 2001 From: Alexandr Tedeev Date: Sun, 10 Dec 2023 08:04:23 +0000 Subject: [PATCH 1/2] Translate ch19-01-unsafe-rust.md via GitLocalize --- rustbook-ru/src/ch19-01-unsafe-rust.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/rustbook-ru/src/ch19-01-unsafe-rust.md b/rustbook-ru/src/ch19-01-unsafe-rust.md index 00f5bc956..b24451eb1 100644 --- a/rustbook-ru/src/ch19-01-unsafe-rust.md +++ b/rustbook-ru/src/ch19-01-unsafe-rust.md @@ -131,7 +131,7 @@ Листинг 19-6. Использование небезопасного кода в реализации функции split_at_mut -Напомним, из раздела ["Тип срез"] главы 4, что срезы состоят из указателя на некоторые данные и длины. Мы используем метод `len` для получения длины среза и метод `as_mut_ptr` для доступа к сырому указателю среза. Поскольку у нас есть изменяемый срез на значения типа `i32`, функция `as_mut_ptr` возвращает сырой указатель типа `*mut i32`, который мы сохранили в переменной `ptr`. +Напомним, из раздела ["Тип срез"](ch04-03-slices.html#the-slice-type) главы 4, что срезы состоят из указателя на некоторые данные и длины. Мы используем метод `len` для получения длины среза и метод `as_mut_ptr` для доступа к сырому указателю среза. Поскольку у нас есть изменяемый срез на значения типа `i32`, функция `as_mut_ptr` возвращает сырой указатель типа `*mut i32`, который мы сохранили в переменной `ptr`. Далее проверяем, что индекс `mid` находится в границах среза. Затем мы обращаемся к небезопасному коду: функция `slice::from_raw_parts_mut` принимает сырой указатель, длину и создаёт срез. Мы используем эту функцию для создания среза, начинающегося с `ptr` и имеющего длину в `mid` элементов. Затем мы вызываем метод `add` у `ptr` с `mid` в качестве аргумента, чтобы получить сырой указатель, который начинается с `mid`, и создаём срез, используя этот указатель и оставшееся количество элементов после `mid` в качестве длины. @@ -226,12 +226,8 @@ ### Доступ к полям объединений (union) -Последнее действие, которое работает только с `unsafe` - это доступ к полям *union*. `union` похож на `struct`, но в каждом конкретном экземпляре одновременно может использоваться только одно объявленное поле. Объединения в основном используются для взаимодействия с объединениями в коде на языке Си. Доступ к полям объединений небезопасен, поскольку Rust не может гарантированно определить тип данных, которые в данный момент хранятся в экземпляре объединения. Подробнее об объединениях вы можете узнать в [the Rust Reference]. +Последнее действие, которое работает только с `unsafe` - это доступ к полям *union*. `union` похож на `struct`, но в каждом конкретном экземпляре одновременно может использоваться только одно объявленное поле. Объединения в основном используются для взаимодействия с объединениями в коде на языке Си. Доступ к полям объединений небезопасен, поскольку Rust не может гарантированно определить тип данных, которые в данный момент хранятся в экземпляре объединения. Подробнее об объединениях вы можете узнать в [the Rust Reference](../reference/items/unions.html). ### Когда использовать небезопасный код Использование `unsafe` для выполнения одного из пяти действий (супер способностей), которые только что обсуждались, не является ошибочным или не одобренным. Но получить корректный `unsafe` код сложнее, потому что компилятор не может помочь в обеспечении безопасности памяти. Если у вас есть причина использовать `unsafe` код, вы можете делать это, а наличие явной `unsafe` аннотации облегчает отслеживание источника проблем, если они возникают. - - -["Тип срез"]: ch04-03-slices.html#the-slice-type -[the Rust Reference]: ../reference/items/unions.html \ No newline at end of file From 2171e827301cfe34d8d174ab6f7c560254fe66dc Mon Sep 17 00:00:00 2001 From: jashka34 Date: Sun, 10 Dec 2023 08:04:26 +0000 Subject: [PATCH 2/2] Translate ch19-01-unsafe-rust.md via GitLocalize --- rustbook-ru/src/ch19-01-unsafe-rust.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rustbook-ru/src/ch19-01-unsafe-rust.md b/rustbook-ru/src/ch19-01-unsafe-rust.md index b24451eb1..00f5bc956 100644 --- a/rustbook-ru/src/ch19-01-unsafe-rust.md +++ b/rustbook-ru/src/ch19-01-unsafe-rust.md @@ -131,7 +131,7 @@ Листинг 19-6. Использование небезопасного кода в реализации функции split_at_mut -Напомним, из раздела ["Тип срез"](ch04-03-slices.html#the-slice-type) главы 4, что срезы состоят из указателя на некоторые данные и длины. Мы используем метод `len` для получения длины среза и метод `as_mut_ptr` для доступа к сырому указателю среза. Поскольку у нас есть изменяемый срез на значения типа `i32`, функция `as_mut_ptr` возвращает сырой указатель типа `*mut i32`, который мы сохранили в переменной `ptr`. +Напомним, из раздела ["Тип срез"] главы 4, что срезы состоят из указателя на некоторые данные и длины. Мы используем метод `len` для получения длины среза и метод `as_mut_ptr` для доступа к сырому указателю среза. Поскольку у нас есть изменяемый срез на значения типа `i32`, функция `as_mut_ptr` возвращает сырой указатель типа `*mut i32`, который мы сохранили в переменной `ptr`. Далее проверяем, что индекс `mid` находится в границах среза. Затем мы обращаемся к небезопасному коду: функция `slice::from_raw_parts_mut` принимает сырой указатель, длину и создаёт срез. Мы используем эту функцию для создания среза, начинающегося с `ptr` и имеющего длину в `mid` элементов. Затем мы вызываем метод `add` у `ptr` с `mid` в качестве аргумента, чтобы получить сырой указатель, который начинается с `mid`, и создаём срез, используя этот указатель и оставшееся количество элементов после `mid` в качестве длины. @@ -226,8 +226,12 @@ ### Доступ к полям объединений (union) -Последнее действие, которое работает только с `unsafe` - это доступ к полям *union*. `union` похож на `struct`, но в каждом конкретном экземпляре одновременно может использоваться только одно объявленное поле. Объединения в основном используются для взаимодействия с объединениями в коде на языке Си. Доступ к полям объединений небезопасен, поскольку Rust не может гарантированно определить тип данных, которые в данный момент хранятся в экземпляре объединения. Подробнее об объединениях вы можете узнать в [the Rust Reference](../reference/items/unions.html). +Последнее действие, которое работает только с `unsafe` - это доступ к полям *union*. `union` похож на `struct`, но в каждом конкретном экземпляре одновременно может использоваться только одно объявленное поле. Объединения в основном используются для взаимодействия с объединениями в коде на языке Си. Доступ к полям объединений небезопасен, поскольку Rust не может гарантированно определить тип данных, которые в данный момент хранятся в экземпляре объединения. Подробнее об объединениях вы можете узнать в [the Rust Reference]. ### Когда использовать небезопасный код Использование `unsafe` для выполнения одного из пяти действий (супер способностей), которые только что обсуждались, не является ошибочным или не одобренным. Но получить корректный `unsafe` код сложнее, потому что компилятор не может помочь в обеспечении безопасности памяти. Если у вас есть причина использовать `unsafe` код, вы можете делать это, а наличие явной `unsafe` аннотации облегчает отслеживание источника проблем, если они возникают. + + +["Тип срез"]: ch04-03-slices.html#the-slice-type +[the Rust Reference]: ../reference/items/unions.html \ No newline at end of file