Merge pull request #3767 from Basil22/patch-1

[Rust/ru-ru] Update intro and fix some misspellings (Обновлена вводная часть и исправлены некоторые опечатки)
This commit is contained in:
Andre Polykanine 2019-11-18 14:48:14 +02:00 committed by GitHub
commit 3382cbf45c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,36 +6,33 @@ contributors:
- ["P1start", "http://p1start.github.io/"] - ["P1start", "http://p1start.github.io/"]
translators: translators:
- ["Anatolii Kosorukov", "https://github.com/java1cprog"] - ["Anatolii Kosorukov", "https://github.com/java1cprog"]
- ["Vasily Starostin", "https://github.com/Basil22"]
lang: ru-ru lang: ru-ru
--- ---
Rust сочетает в себе низкоуровневый контроль над производительностью с удобством высокого уровня и предоставляет гарантии Язык Rust разработан в Mozilla Research. Он сочетает низкоуровневую производительность с удобством языка высокого уровня и одновременно гарантирует безопасность памяти.
безопасности.
Он достигает этих целей, не требуя сборщика мусора или времени выполнения, что позволяет использовать библиотеки Rust как замену
для C-библиотек.
Первый выпуск Rust, 0.1, произошел в январе 2012 года, и в течение 3 лет развитие продвигалось настолько быстро, что до Он достигает этих целей без сборщика мусора или сложной среды выполнения, что позволяет использовать библиотеки Rust как прямую замену
недавнего времени использование стабильных выпусков было затруднено, и вместо этого общий совет заключался в том, чтобы C-библиотек. И наоборот, Rust умеет использовать готовые С-библиотеки как есть, без накладных расходов.
использовать последние сборки.
15 мая 2015 года был выпущен Rust 1.0 с полной гарантией обратной совместимости. Усовершенствования времени компиляции и Первый выпуск Rust, 0.1, произошел в январе 2012 года. В течение 3 лет развитие продвигалось настолько быстро, что язык серьезно менялся без сохранения совместимости. Это дало возможность обкатать и отполировать синтаксис и возможности языка.
других аспектов компилятора в настоящее время доступны в ночных сборках. Rust приняла модель выпуска на поезде с регулярными выпусками каждые шесть недель. Rust 1.1 beta был доступен одновременно с выпуском Rust 1.0.
Хотя Rust является языком относительно низкого уровня, Rust имеет некоторые функциональные концепции, которые обычно 15 мая 2015 года был выпущен Rust 1.0 с полной гарантией обратной совместимости. Сборка поставляется в трех вариантах: стабильная версия, бета-версия, ночная версия. Все нововведения языка сперва обкатываются на ночной и бета-версиях, и только потом попадают в стабильную. Выход очередной версии происходит раз в 6 недель. В 2018 году вышло второе большое обновление языка, добавившее ему новых возможностей.
встречаются на языках более высокого уровня. Это делает Rust не только быстрым, но и простым и эффективным для ввода кода.
Хотя Rust является языком относительно низкого уровня, он имеет все возможности высокоуровневых языков: процедурное, объектное, функциональное, шаблонное и другие виды программирования. На данный момент Rust является одним из самых мощных (а может быть и самым) по возможностям среди статически типизированных языков. Это делает Rust не только быстрым, но и простым и эффективным для разработки сложного кода.
```rust ```rust
// Это однострочный комментарии // Это однострочный комментарий
// //
/// Так выглядит комментарий для документации /// Так выглядит комментарий для документации
/// # Examples /// # Examples
/// ///
/// /// ```
/// let seven = 7 /// let seven = 7
/// /// ```
/////////////// ///////////////
// 1. Основы // // 1. Основы //
@ -63,10 +60,9 @@ fn main() {
let y: i32 = 13i32; let y: i32 = 13i32;
let f: f64 = 1.3f64; let f: f64 = 1.3f64;
// Автоматическое выявление типа данных // Автоматическое выведение типа данных
// В большинстве случаев компилятор Rust может вычислить // В большинстве случаев компилятор Rust может вычислить
// тип переменной, поэтому // тип переменной, поэтому вам не нужно явно указывать тип.
// вам не нужно писать явные аннотации типа.
let implicit_x = 1; let implicit_x = 1;
let implicit_f = 1.3; let implicit_f = 1.3;
@ -87,12 +83,11 @@ fn main() {
// Печать на консоль // Печать на консоль
println!("{} {}", f, x); // 1.3 hello world println!("{} {}", f, x); // 1.3 hello world
// `String` изменяемя строка // `String` изменяемая строка
let s: String = "hello world".to_string(); let s: String = "hello world".to_string();
// Строковый срез - неизменяемый вид в строки // Строковый срез - неизменяемое представление части строки
// Это в основном неизменяемая пара указателей на строку - // Представляет собой пару из указателя на начало фрагмента и его длины
// Это указатель на начало и конец строкового буфера
let s_slice: &str = &s; let s_slice: &str = &s;
@ -154,6 +149,8 @@ fn main() {
let up = Direction::Up; let up = Direction::Up;
// Перечисление с полями // Перечисление с полями
// В отличие от C и C++ компилятор автоматически следит за тем,
// какой именно тип хранится в перечислении.
enum OptionalI32 { enum OptionalI32 {
AnI32(i32), AnI32(i32),
Nothing, Nothing,
@ -198,9 +195,9 @@ fn main() {
let another_foo = Foo { bar: 1 }; let another_foo = Foo { bar: 1 };
println!("{:?}", another_foo.frobnicate()); // Some(1) println!("{:?}", another_foo.frobnicate()); // Some(1)
///////////////////////// /////////////////////////////////
// 3. Поиск по шаблону // // 3. Сопоставление по шаблону //
///////////////////////// /////////////////////////////////
let foo = OptionalI32::AnI32(1); let foo = OptionalI32::AnI32(1);
match foo { match foo {
@ -223,9 +220,9 @@ fn main() {
println!("The second number is Nothing!"), println!("The second number is Nothing!"),
} }
///////////////////// //////////////////////////////////////////////
// 4. Управление ходом выполнения программы // // 4. Управление ходом выполнения программы //
///////////////////// //////////////////////////////////////////////
// `for` loops/iteration // `for` loops/iteration
let array = [1, 2, 3]; let array = [1, 2, 3];
@ -266,9 +263,9 @@ fn main() {
break; break;
} }
///////////////////////////////// //////////////////////////////////
// 5. Защита памяти и указатели // // 5. Защита памяти и указатели //
///////////////////////////////// //////////////////////////////////
// Владеющий указатель такой указатель может быть только один // Владеющий указатель такой указатель может быть только один
// Это значит, что при вызоде из блока переменная автоматически становится недействительной. // Это значит, что при вызоде из блока переменная автоматически становится недействительной.