2. Rust в контексте современного
программирования
Никита Баксаляр — @nbaksalyar
MaidSafe
3. Актуальность Rust
● Начало разработки в 2006 году, релиз версии 1.0 в 2015
● На сегодняшний день: релизы каждые 6 недель, версия 1.13 и
широкое применение в продакшене
● Скорость C++ и безопасность Go без недостатков сборки мусора
4. На практике: Servo
● Браузерный движок нового поколения
от Mozilla
● Более 500 тыс. строк кода на Rust и
более 400 участников разработки
● До 4-5 раз быстрее Gecko и WebKit в
предварительных бенчмарках
● Отдельные компоненты уже в Firefox,
в 2017 году — Project Quantum
7. Небезопасные языки
● Позволяют писать некорректные и небезопасные программы
(Heartbleed в OpenSSL, Shellshock в Bash)
● Используются для сложных и системных задач:
поисковые движки, графические движки для игр, ядра ОС и т.д.
● Бэкенды Google, Яндекса, и других крупнейших проектов используют C++
9. Подход Rust
● Автоматическое освобождение памяти без сборки мусора
● «Умные указатели»
● Время жизни переменных ограничено областью видимости:
fn main() {
let string = String::new();
// переменная string будет освобождена
// перед выходом из функции
}
10. Альтернативное решение: сборка мусора
● Автоматические освобождение неиспользуемой памяти
● Большинство современных языков использует GC:
Google Go, Java, C#, Ruby, Python, JavaScript, Haskell, и многие другие
● Недостатки: “остановка мира” и сниженная производительность
11. Проблемы небезопасных языков
● Освободили память, а указатель остался:
void function(pair *p) {
char *entry = malloc(5);
p->first = entry;
// …
free(entry);
}
17. Безопасные типы в Rust
enum Option<Value> {
Some(Value),
None
}
let value1 = Some(123);
let value2 = None;
18. Альтернатива исключениям в Rust
enum Result<Value, Error> {
Ok(Value),
Err(Error)
}
let success = Ok(42);
let error = Err(“Хьюстон, у нас проблема”);
19. Альтернатива исключениям в Rust
let result = Ok(42);
match result {
Ok(value) => print!(“{}”, value),
Err(error) => { … }
}
20. ООП?
● Rust — не объектно-ориентированный язык
● Модули и структуры вместо классов и объектов
● Типажи вместо интерфейсов
21. Структуры
● Могут содержать данные
● Могут иметь связанные методы
● Инкапсуляция: контроль доступа к закрытой и открытой части структуры
● Нет возможности наследования
struct User {
login: String,
password: String
}
22. Типажи
● Похожи на тайпклассы в Haskell и типажи в Scala
● Форма множественного наследования и полиморфизма
● Методы типажей могут содержать стандартную реализацию
trait Authenticator {
fn login(&self, user: &str, password: &str);
fn login_default(&self) {
self.login(“Crash_Override”, “password”);
}
}
28. Интеграция с другими языками
● Python, Ruby, Node.js
● Поддержка C ABI
● Возможность параллелизации
29. Сообщество
● Русскоязычное сообщество: http://rustycrate.ru
Чат в Gitter: https://gitter.im/ruRust/general
Чат в Telegram: https://telegram.me/proRust
Форум: https://forum.rustycrate.ru/
● Книга “Язык программирования Rust” на русском:
http://rurust.github.io/rust_book_ru/
● События: Rust Moscow Meetup,
CoLaboratory: Rust в Kaspersky Lab
30. Процесс разработки языка
● Добавление новых возможностей языка через процесс RFC
● Стать разработчиком компилятора — легко!
● Цели на 2017:
Более понятный процесс изучения для новичков;
Больше инструментов разработки и лучшая поддержка IDE;
Более высокая скорость компиляции.
31. Заключение
● Безопасность и скорость без боли
● Революция в мире браузеров за счет стабильной
параллелизации вычислений
● Применение в продакшене только начинается