rust - gdg devfest siberia 2016

33
#DevFest16 #dfSiberia #GDGNsk #GDGOmsk

Upload: nikita-baksalyar

Post on 16-Apr-2017

147 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Rust - GDG DevFest Siberia 2016

#DevFest16 #dfSiberia #GDGNsk #GDGOmsk

Page 2: Rust - GDG DevFest Siberia 2016

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

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

Page 3: Rust - GDG DevFest Siberia 2016

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

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

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

Page 4: Rust - GDG DevFest Siberia 2016

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

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

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

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

в 2017 году — Project Quantum

Page 6: Rust - GDG DevFest Siberia 2016

На практике: Redox● Операционные системы:

Redoxhttp://redox-os.org

intermezzOS https://intermezzos.github.io/

Page 7: Rust - GDG DevFest Siberia 2016

На практике: Dropbox

● Перенос более 500 петабайт из облака Amazon в собственное хранилище● Rust применяется для оптимизации узких мест● Реализация алгоритма компрессии Brotli

Page 8: Rust - GDG DevFest Siberia 2016

На практике: MaidSafe● Распределенная глобальная P2P-сеть

для хранения файлов и платформа для приложений

● Открытые исходники

● Проект полностью переписанс C++ на Rust

Page 9: Rust - GDG DevFest Siberia 2016

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

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

Page 10: Rust - GDG DevFest Siberia 2016

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

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

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

Page 11: Rust - GDG DevFest Siberia 2016

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

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

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

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

Page 12: Rust - GDG DevFest Siberia 2016

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

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

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

}

Page 13: Rust - GDG DevFest Siberia 2016

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

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

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

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

}

Page 14: Rust - GDG DevFest Siberia 2016

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

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

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

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

}

Page 15: Rust - GDG DevFest Siberia 2016

Решение проблем: сборка мусора

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

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

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

Page 16: Rust - GDG DevFest Siberia 2016

Подход Rust

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

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

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

Page 17: Rust - GDG DevFest Siberia 2016

Владение

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

function(str); …

}

Page 18: Rust - GDG DevFest Siberia 2016

Владение

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

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

}

Page 19: Rust - GDG DevFest Siberia 2016

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

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

str.push(‘U’);}

Page 20: Rust - GDG DevFest Siberia 2016

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

— Тони Хоар

Page 21: Rust - GDG DevFest Siberia 2016

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

enum Option<Value> {

Some(Value),None

}

Page 22: Rust - GDG DevFest Siberia 2016

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

enum Result<Value, Error> {

Ok(Value),Err(Error)

}

Page 23: Rust - GDG DevFest Siberia 2016

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

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

Page 24: Rust - GDG DevFest Siberia 2016

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

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

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

Page 25: Rust - GDG DevFest Siberia 2016

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

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

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

Page 26: Rust - GDG DevFest Siberia 2016

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

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

Page 27: Rust - GDG DevFest Siberia 2016

Сообщество

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

Page 28: Rust - GDG DevFest Siberia 2016

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

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

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

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

Page 29: Rust - GDG DevFest Siberia 2016

Заключение

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

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

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

Page 30: Rust - GDG DevFest Siberia 2016

ООП?

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

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

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

Page 31: Rust - GDG DevFest Siberia 2016

Структуры

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

struct User { login: String, password: String}

Page 32: Rust - GDG DevFest Siberia 2016

Типажи

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

trait Authenticator { fn login(&self, user: User); fn login_current(&self) { self.login(User::current()); }}

Page 33: Rust - GDG DevFest Siberia 2016

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

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