Rust сочетает в себе низкоуровневый контроль над производительностью с удобством высокого уровня и предоставляет гарантии
безопасности.
Он достигает этих целей, не требуя сборщика мусора или времени выполнения, что позволяет использовать библиотеки Rust как замену
для C-библиотек.
Первый выпуск Rust, 0.1, произошел в январе 2012 года, и в течение 3 лет развитие продвигалось настолько быстро, что до
недавнего времени использование стабильных выпусков было затруднено, и вместо этого общий совет заключался в том, чтобы
использовать последние сборки.
15 мая 2015 года был выпущен Rust 1.0 с полной гарантией обратной совместимости. Усовершенствования времени компиляции и
других аспектов компилятора в настоящее время доступны в ночных сборках. Rust приняла модель выпуска на поезде с регулярными выпусками каждые шесть недель. Rust 1.1 beta был доступен одновременно с выпуском Rust 1.0.
Хотя Rust является языком относительно низкого уровня, Rust имеет некоторые функциональные концепции, которые обычно
встречаются на языках более высокого уровня. Это делает Rust не только быстрым, но и простым и эффективным для ввода кода.
```rust
// Это однострочный комментарии
//
/// Так выглядит комментарий для документации
/// # Examples
///
///
/// let seven = 7
///
///////////////
// 1. Основы //
///////////////
// Функции
// `i32` это целочисленный знаковый тип 32-bit
#[allow(dead_code)]
fn add2(x: i32, y: i32) -> i32 {
// метод возвращает сумму x и y
x + y
}
// Главная функция программы
#[allow(unused_variables)]
#[allow(unused_assignments)]
#[allow(dead_code)]
fn main() {
// Числа //
// неизменяемая переменная
let x: i32 = 1;
// Суффиксы целое/дробное
let y: i32 = 13i32;
let f: f64 = 1.3f64;
// Автоматическое выявление типа данных
// В большинстве случаев компилятор Rust может вычислить
// тип переменной, поэтому
// вам не нужно писать явные аннотации типа.
let implicit_x = 1;
let implicit_f = 1.3;
// Арифметика
let sum = x + y + 13;
// Изменяемая переменная
let mut mutable = 1;
mutable = 4;
mutable += 2;
// Строки //
// Строковые литералы
let x: &str = "hello world!";
// Печать на консоль
println!("{} {}", f, x); // 1.3 hello world
// `String`– изменяемя строка
let s: String = "hello world".to_string();
// Строковый срез - неизменяемый вид в строки
// Это в основном неизменяемая пара указателей на строку -
// Это указатель на начало и конец строкового буфера
let s_slice: &str = &s;
println!("{} {}", s, s_slice); // hello world hello world
// Vectors/arrays //
// фиксированный массив
let four_ints: [i32; 4] = [1, 2, 3, 4];
// динамический массив
let mut vector: Vec<i32> = vec![1, 2, 3, 4];
vector.push(5);
// Срез - неизменяемое представление значений вектора
let slice: &[i32] = &vector;
// Используйте шаблон `{:?}`для печати отладочной информации структур с данными