Rust - GDG DevFest 2016 Nizhny Novgorod

32
#DevFest16 #GDGNN #DevFestNN16 #DevFestNN

Transcript of Rust - GDG DevFest 2016 Nizhny Novgorod

Page 1: Rust - GDG DevFest 2016 Nizhny Novgorod

#DevFest16 #GDGNN #DevFestNN16 #DevFestNN

Page 2: Rust - GDG DevFest 2016 Nizhny Novgorod

Rust в контексте современного программирования

Никита Баксаляр — @nbaksalyarMaidSafe

Page 3: Rust - GDG DevFest 2016 Nizhny Novgorod

Актуальность Rust

● Начало разработки в 2006 году, релиз версии 1.0 в 2015● На сегодняшний день: релизы каждые 6 недель, версия 1.13 и

широкое применение в продакшене● Скорость C++ и безопасность Go без недостатков сборки мусора

Page 4: Rust - GDG DevFest 2016 Nizhny Novgorod

На практике: Servo● Браузерный движок нового поколения

от Mozilla● Более 500 тыс. строк кода на Rust и

более 400 участников разработки● До 4-5 раз быстрее Gecko и WebKit в

предварительных бенчмарках● Отдельные компоненты уже в Firefox,

в 2017 году — Project Quantum

Page 5: Rust - GDG DevFest 2016 Nizhny Novgorod

Ключевые преимущества

● Бесплатные абстракции, скорость, и компиляция в машинный код

Page 6: Rust - GDG DevFest 2016 Nizhny Novgorod

Ключевые преимущества

● Безопасность и продвинутая система типов

● Компромисс между скоростью низкоуровневых и удобством высокоуровневых языков

Page 7: Rust - GDG DevFest 2016 Nizhny Novgorod

Небезопасные языки

● Позволяют писать некорректные и небезопасные программы(Heartbleed в OpenSSL, Shellshock в Bash)

● Используются для сложных и системных задач:поисковые движки, графические движки для игр, ядра ОС и т.д.

● Бэкенды Google, Яндекса, и других крупнейших проектов используют C++

Page 8: Rust - GDG DevFest 2016 Nizhny Novgorod

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

● Выделили память, забыли освободить:

void function() {char *string1 = malloc(5);char *string2 = malloc(10);// …free(string1);

}

Page 9: Rust - GDG DevFest 2016 Nizhny Novgorod

Подход Rust

● Автоматическое освобождение памяти без сборки мусора● «Умные указатели»● Время жизни переменных ограничено областью видимости:

fn main() {let string = String::new();// переменная string будет освобождена

// перед выходом из функции}

Page 10: Rust - GDG DevFest 2016 Nizhny Novgorod

Альтернативное решение: сборка мусора

● Автоматические освобождение неиспользуемой памяти

● Большинство современных языков использует GC:Google Go, Java, C#, Ruby, Python, JavaScript, Haskell, и многие другие

● Недостатки: “остановка мира” и сниженная производительность

Page 11: Rust - GDG DevFest 2016 Nizhny Novgorod

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

● Освободили память, а указатель остался:

void function(pair *p) {char *entry = malloc(5);

p->first = entry;// …free(entry);

}

Page 12: Rust - GDG DevFest 2016 Nizhny Novgorod

Владение

fn main() {let mut str = String::from(“♥”);

function(str); …

}

Page 13: Rust - GDG DevFest 2016 Nizhny Novgorod

Владение

fn main() {let mut str = String::from(“♥”);

function(str); str.push(‘U’); ← ошибка

}

Page 14: Rust - GDG DevFest 2016 Nizhny Novgorod

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

fn main() {let mut str = String::from(“♥”);function(&mut str);

str.push(‘U’);}

Page 15: Rust - GDG DevFest 2016 Nizhny Novgorod

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

● Выход за границы выделенной памяти:

void function() {char *string = malloc(2);

string[0] = ‘h’; string[1] = ‘i’; string[6784745] = ‘?’;

}

Page 16: Rust - GDG DevFest 2016 Nizhny Novgorod

«Нулевые указатели — моя главная ошибкаценой в миллиард долларов»

— Тони Хоар

Page 17: Rust - GDG DevFest 2016 Nizhny Novgorod

Безопасные типы в Rust

enum Option<Value> {

Some(Value),None

}

let value1 = Some(123);

let value2 = None;

Page 18: Rust - GDG DevFest 2016 Nizhny Novgorod

Альтернатива исключениям в Rust

enum Result<Value, Error> {

Ok(Value),Err(Error)

}

let success = Ok(42);

let error = Err(“Хьюстон, у нас проблема”);

Page 19: Rust - GDG DevFest 2016 Nizhny Novgorod

Альтернатива исключениям в Rust

let result = Ok(42);

match result { Ok(value) => print!(“{}”, value), Err(error) => { … }}

Page 20: Rust - GDG DevFest 2016 Nizhny Novgorod

ООП?

● Rust — не объектно-ориентированный язык

● Модули и структуры вместо классов и объектов

● Типажи вместо интерфейсов

Page 21: Rust - GDG DevFest 2016 Nizhny Novgorod

Структуры

● Могут содержать данные● Могут иметь связанные методы● Инкапсуляция: контроль доступа к закрытой и открытой части структуры● Нет возможности наследования

struct User { login: String, password: String}

Page 22: Rust - GDG DevFest 2016 Nizhny Novgorod

Типажи

● Похожи на тайпклассы в Haskell и типажи в Scala● Форма множественного наследования и полиморфизма● Методы типажей могут содержать стандартную реализацию

trait Authenticator { fn login(&self, user: &str, password: &str);

fn login_default(&self) { self.login(“Crash_Override”, “password”); }}

Page 23: Rust - GDG DevFest 2016 Nizhny Novgorod

Типажи

● Можно добавлять методы к чужим структурам

trait Hello { fn say_hello(&self);}

Page 24: Rust - GDG DevFest 2016 Nizhny Novgorod

Типажи

● Можно добавлять методы к чужим структурам

impl Hello for String { fn say_hello(&self) { println!(“Привет, {}!”, self); }}

Page 25: Rust - GDG DevFest 2016 Nizhny Novgorod

Типажи

● Можно добавлять методы к чужим структурам

…"мир".to_string().say_hello();

→ "Привет, мир!"

Page 26: Rust - GDG DevFest 2016 Nizhny Novgorod

Инструментарий Rust

● Crates.io:Более 7 000 пакетов с библиотеками.

● Cargo:Компиляция проекта;Пакетный менеджер;Встроенный фреймворк для тестирования

Page 27: Rust - GDG DevFest 2016 Nizhny Novgorod

Поддержка интегрированных сред разработки● Дополнение кода и навигация

● Плагины для IntelliJ Idea, Eclipse и Visual Studio

● Плагин Racer для текстовых редакторов (Atom, Sublime Text, Emacs, Vim)

Page 28: Rust - GDG DevFest 2016 Nizhny Novgorod

Интеграция с другими языками

● Python, Ruby, Node.js● Поддержка C ABI● Возможность параллелизации

Page 29: Rust - GDG DevFest 2016 Nizhny Novgorod

Сообщество

● Русскоязычное сообщество: 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

Page 30: Rust - GDG DevFest 2016 Nizhny Novgorod

Процесс разработки языка

● Добавление новых возможностей языка через процесс RFC

● Стать разработчиком компилятора — легко!

● Цели на 2017:Более понятный процесс изучения для новичков;Больше инструментов разработки и лучшая поддержка IDE;Более высокая скорость компиляции.

Page 31: Rust - GDG DevFest 2016 Nizhny Novgorod

Заключение

● Безопасность и скорость без боли

● Революция в мире браузеров за счет стабильной параллелизации вычислений

● Применение в продакшене только начинается

Page 32: Rust - GDG DevFest 2016 Nizhny Novgorod

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

Слайды будут доступны в Твиттере@nbaksalyar