Добавить в корзинуПозвонить
Найти в Дзене
Журнал «Код»

Rust — молодой и дерзкий язык программирования

Говорят, что это одновременно C++ и Haskell.
Первая версия языка Rust появилась в 2010 году, и он сразу занял третью строчку в списке любимых языков разработчиков на StackOverflow. Год спустя Rust возглавил этот список и держался там несколько лет. Давайте посмотрим, почему этот язык стал таким популярным, в чём его особенности и почему вокруг него много споров.
В чём идея языка Rust
Автору языка
Оглавление

Говорят, что это одновременно C++ и Haskell.

Первая версия языка Rust появилась в 2010 году, и он сразу занял третью строчку в списке любимых языков разработчиков на StackOverflow. Год спустя Rust возглавил этот список и держался там несколько лет. Давайте посмотрим, почему этот язык стал таким популярным, в чём его особенности и почему вокруг него много споров.

В чём идея языка Rust

Автору языка нравилась скорость работы и всемогущество языка C++ и надёжность Haskell . Он поставил перед собой задачу совместить оба этих подхода в одном языке, и за несколько лет он собрал первую версию языка Rust.

Rust позиционируется как компилируемый системный мультипарадигмальный язык высокого уровня. Сейчас поясним, что это значит.

Компилируемый язык означает, что готовая программа — это отдельный файл, который можно запустить на любом компьютере с нужной операционной системой. Для запуска не нужно устанавливать среду разработки и компилятор, достаточно, чтобы скомпилированная версия подходила к вашему компьютеру.

Системный — это когда на языке пишут программы для работы системы в целом. Это могут быть операционные системы, драйверы и служебные утилиты. Обычные программы тоже можно писать на Rust — от калькулятора до системы управления базами данных . Системный язык позволяет писать очень быстрые программы, которые используют все возможности железа.

Мультипарадигмальный значит, что в языке сочетаются несколько парадигм программирования. В случае Rust это ООП, процедурное и функциональное программирование. Причём, ООП в Rust пришло из C++, а функциональное — из Haskell. Программист может сам выбирать, в каком стиле он будет писать код, или совмещать разные подходы в разных элементах программы.

Синтаксис и код

За основу синтаксиса в Rust взят синтаксис из C и C++.Например, классический «Привет, мир!» на Rust выглядит так:

fn main() {
    println!("Hello, world!");
}

Если вы знакомы с подобным синтаксисом, то сможете быстро начать писать и на Rust. Другое дело, что в Rust есть свои особенности:

  • переменные менять нельзя, а если нужно — при объявлении указывают ключевое слово mutable;
  • все команды внутри условных операторов, циклов и других блочных конструкций обязательно брать в фигурные скобки, даже если там будет всего одна команда;
  • аргументы у условных операторов, например if или while, в скобки брать не нужно;
  • при объявлении переменной можно использовать условный оператор:

let x = if new_game() { 4 }
    else if reload() { 3 }
  else { 0 }

Последнее разберём подробно. При такой записи переменная x будет равна четырём, если функция new_game() вернёт значение true. Если этого не случится, компилятор вызовет функцию reload() и проверит, что получилось. Если true, то x примет значение 3, а если и это не сработает — то x станет равным 0.

Ещё в Rust есть сравнение переменной с образцом. В зависимости от того, с каким образцом совпало значение переменной, выполнится та или иная функция:

// смотрим, что лежит в переменной my_number и в зависимости от этого выводим что-то на экран
alt my_number {
0 { std::io::println("Ноль"); }
1 | 2 { std::io::println("Один или два"); }
3 to 10 { std::io::println("От трёх до десяти"); }
_ { std::io::println("Что-то другое…"); }
}

Главная особенность программ на Rust

Несмотря на синтаксис, похожий на C, главную особенность программ на Rust разработчики взяли из Haskell, и звучит она так:

⠀⠀⠀Если программа на Rust скомпилировалась и не упала во время запуска, то ⠀⠀⠀она будет работать до тех пор, пока вы сами её не остановите.

Это значит, что программы на Rust почти так же надёжны, как программы на Haskell. Почти — потому что если программист использует «небезопасный» блок unsafe, который даёт ему прямой доступ к памяти, то в теории это иногда может привести к сбоям. Но даже с такими блоками Rust старается справляться сам и падает только в безнадёжных случаях.

Плюсы и минусы языка

Когда язык совмещает в себе несколько разных подходов из других языков, он получает большинство преимуществ каждого из них:

• высокая скорость работы программ;
• возможность написать код в ООП-стиле: с классами и объектами (но есть ограничения);
• стабильность в работе и при компиляции;
• компилятор сам предлагает варианты исправления ошибок в коде;
• кросс-платформенный компилятор;
• поддержка многопоточности;
• поддержка «небезопасных» блоков для прямой работы с памятью;
можно вставлять код на C и C++.

Минусы в основном связаны со скоростью развития языка. Так как Rust развивается очень быстро, то часто бывает так, что код из старой версии не работает в новой версии. Ещё к минусам можно добавить:

• избыточную документацию, которая иногда противоречит сама себе;
• меняющийся от версии к версии синтаксис;
• неполную поддержку ООП и сложную работу с объектами и наследованием.

Что написано на Rust

Чаще всего Rust используют в тех проектах, где нужна стабильность и надёжность при высокой нагрузке и общее быстродействие программы.

На практике Rust подходит для разработки ОС, веб-серверов, системных программ мониторинга, веб-движков, а также для создания масштабируемых частей фронтенда и бэкенда. Например, вот самые известные проекты, где Rust был основным языком программирования:

• Dropbox — серверная часть, которая отвечает за синхронизацию.
• Coursera — большая часть фронт- и бэкенда написана на Rust.
• Mozilla: Firefox и sccache (распределённый кэш для компилятора).
• OpenDNS — сервис для использования общедоступных DNS-сервисов.
• Servo — браузерный движок с многопоточностью.
• Twitter — использует Rust для высоконагруженной части сервиса.