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. На практике: Dropbox
● Перенос более 500 петабайт из облака Amazon в собственное хранилище
● Rust применяется для оптимизации узких мест
● Реализация алгоритма компрессии Brotli
8. На практике: MaidSafe
● Распределенная глобальная P2P-сеть
для хранения файлов и платформа для
приложений
● Открытые исходники
● Проект полностью переписан
с C++ на Rust
11. Небезопасные языки
● Позволяют писать некорректные и небезопасные программы
(Heartbleed в OpenSSL, Shellshock в Bash)
● Используются для сложных и системных задач:
поисковые движки, графические движки для игр, ядра ОС и т.д.
● Бэкенды Google, Яндекса, и других крупнейших проектов используют C++
13. Проблемы небезопасных языков
● Освободили память, а указатель остался:
void function(pair *p) {
char *entry = malloc(5);
p->first = entry;
// …
free(entry);
}
14. Проблемы небезопасных языков
● Выход за границы выделенной памяти:
void function() {
char *string = malloc(2);
string[0] = ‘h’;
string[1] = ‘i’;
string[6784745] = ‘?’;
}
15. Решение проблем: сборка мусора
● Автоматические освобождение неиспользуемой памяти
● Большинство современных языков использует GC:
Google Go, Java, C#, Ruby, Python, JavaScript, Haskell, и многие другие
● Недостатки: “остановка мира” и сниженная производительность
16. Подход Rust
● Автоматическое освобождение памяти без сборки мусора
● «Умные указатели»
● Время жизни переменных ограничено областью видимости:
fn main() {
let string = String::new();
// переменная string будет освобождена
// перед выходом из функции
}
26. Интеграция с другими языками
● Python, Ruby, Node.js
● Поддержка C ABI
● Возможность параллелизации
27. Сообщество
● Русскоязычное сообщество: http://rustycrate.ru
Чат в Gitter: https://gitter.im/ruRust/general
Форум: https://forum.rustycrate.ru/
● Книга “Язык программирования Rust” на русском:
http://rurust.github.io/rust_book_ru/
● События: Rust Moscow Meetup,
CoLaboratory: Rust в Kaspersky Lab
28. Процесс разработки языка
● Добавление новых возможностей языка через процесс RFC
● Стать разработчиком компилятора — легко!
● Цели на 2017:
Более понятный процесс изучения для новичков;
Больше инструментов разработки и лучшая поддержка IDE;
Более высокая скорость компиляции.
29. Заключение
● Безопасность и скорость без боли
● Революция в мире браузеров за счет стабильной
параллелизации вычислений
● Применение в продакшене только начинается
30. ООП?
● Rust — не объектно-ориентированный язык
● Модули и структуры вместо классов и объектов
● Типажи вместо интерфейсов
31. Структуры
● Могут содержать данные
● Могут иметь связанные методы
● Инкапсуляция: контроль доступа к закрытой и открытой части структуры
● Нет возможности наследования
struct User {
login: String,
password: String
}
32. Типажи
● Задают интерфейс, которому нужно соответствовать
● Форма множественного наследования и полиморфизма
● Методы типажей могут содержать стандартную реализацию
trait Authenticator {
fn login(&self, user: User);
fn login_current(&self) {
self.login(User::current());
}
}