rust: история языка и контекст применения

18
История Rust Появился в 2006 году. Множество проб и ошибок в дизайне по ходу разработки: акторы и сборка мусора. Эпоха стабильности: релиз 1.0 в 2015.

Upload: nikita-baksalyar

Post on 21-Jan-2017

349 views

Category:

Software


6 download

TRANSCRIPT

Page 1: Rust: история языка и контекст применения

История Rust

● Появился в 2006 году.● Множество проб и ошибок в дизайне по ходу

разработки: акторы и сборка мусора.● Эпоха стабильности: релиз 1.0 в 2015.

Page 2: Rust: история языка и контекст применения

Servo

● Проект Servo: браузерный движок нового поколения, разрабатывается компаниями Mozilla и Samsung как замена для Gecko в Firefox.

● Более ~500 тыс. строккода и 400 контри-бьюторов.

● До 4 раз быстрееGecko в предвари-тельных бенчмарках.

Page 3: Rust: история языка и контекст применения

Почему Rust?

● OCaml с C-подобным синтаксисом.● Компиляция в машинный код.● Безопасность.● Скорость.

Page 4: Rust: история языка и контекст применения

Проблемы небезопасных языков

● Ручная работа с памятью:● Утечки.● Висячие указатели.● Переполнения буфера.

Page 5: Rust: история языка и контекст применения

Подход Rust: владение

● Одна переменная — одно значение.

let a = "hello";

Page 6: Rust: история языка и контекст применения

Передача владения

● Значения переменных можно перемещать:let variable = <значение>;let new_owner = variable;new_owner.method();// Далее мы не можем обращаться к variable,// поскольку владение передано new_owner.

Page 7: Rust: история языка и контекст применения

Заимствования

● Временная передача владения:let variable = SomeStructure {};let borrow = &variable;print!(borrow.calculate());

● Количество заимствований не ограничено, пока мы не изменяем данные.

Page 8: Rust: история языка и контекст применения

Изменяемые заимствования

● Главное правило: изменять данные можно только в одном месте.

● Временная передача владения с возможностью изменения:let mut variable = <значение>;{ let mut borrow = &mut variable; borrow.change(); // Здесь мы не имеем доступа к переменной variable.}// Владение вернулось к variable:variable.change();

Page 9: Rust: история языка и контекст применения

Изменяемые заимствования

● Полная запись:let mut variable = <значение>;{ // Перемещаем владение из variable в borrow: let mut borrow = variable; ... // Возвращаем владение variable: variable = borrow;}

Page 10: Rust: история языка и контекст применения

Почему это важно

● Избавляет от утечек памяти.● Исключает висячие указатели.● Упрощает параллелизацию кода.

Page 11: Rust: история языка и контекст применения

Строгая типизация

● Подсчет и проверка ссылок происходят на этапе компиляции.

● Статический анализатор кода, встроенныйв компилятор.

● Вывод типов по алгоритму Хиндли-Милнера:

let a = 12; // не указываем типlet b = "hello";

Page 12: Rust: история языка и контекст применения

ООП?

● Вместо классов — структуры.● Вместо наследования — делегирование.● Вместо интерфейсов — типажи.

Page 13: Rust: история языка и контекст применения

Структуры

struct DataGroup {

a: u8,

b: u8

}

● Почти что классы (но без наследования).● Инкапсуляция данных.● Открытые и закрытые методы.

Page 14: Rust: история языка и контекст применения

Типажи

trait Queryable {

fn query(&self) -> String;

}

● Обеспечивают полиморфизм.● Форма множественного наследования — методы

типажей могут содержать стандартную реализацию.

● Также известны как тайпклассы в Хаскелле.

Page 15: Rust: история языка и контекст применения

Оператор match

● Больше, чем switch/case.● Сопоставление с образцом (pattern

matching):match (var) { 1...5 => ..., // От 1 до 5 8 | 10 => ..., // 8 или 10 _ => ..., // Любые другие паттерны}

Page 16: Rust: история языка и контекст применения

Про скорость

● Задачи, зависящие от процессора (CPU-bound) и от ввода-вывода (I/O-bound).

● Динамическая типизация и виртуальные машины без JIT-компиляции снижают производительность.

● Высокая скорость — одна из целей разработки Rust'а.

● Абстракции не требуют больше памяти или процессорного времени.

Page 17: Rust: история языка и контекст применения

Зачем все это нужно

● Модули для других языков с ускорением медленных участков кода.

● Проект Neon: расширения для Node.js.● Замена для C и C++.

Page 18: Rust: история языка и контекст применения

Спасибо за внимание!Вопросы?

Ссылка на слайды будет втвиттере @nbaksalyar.

Ресурсы:

http://rustycrate.ru — русскоязычное сообществоразработчиков на Rust. Форум, чат в Gitter, статьи и

переводы.

https://www.rust-lang.org — официальный сайт.

http://servo.org — браузерный движок Servo.