SlideShare a Scribd company logo
1 of 33
Download to read offline
#DevFest16 #dfSiberia #GDGNsk #GDGOmsk
Rust в контексте современного
программирования
Никита Баксаляр — @nbaksalyar
MaidSafe
Актуальность Rust
● Начало разработки в 2006 году, релиз версии 1.0 в 2015
● На сегодняшний день: релизы каждые 6 недель, версия 1.13 и
широкое применение в продакшене
● Скорость C++ и безопасность Go без недостатков сборки мусора
На практике: Servo
● Браузерный движок нового поколения
от Mozilla
● Более 500 тыс. строк кода на Rust и
более 400 участников разработки
● До 4-5 раз быстрее Gecko и WebKit в
предварительных бенчмарках
● Отдельные компоненты уже в Firefox,
в 2017 году — Project Quantum
На практике: Redox
● Операционные системы:
Redox
http://redox-os.org
intermezzOS
https://intermezzos.github.io/
На практике: Dropbox
● Перенос более 500 петабайт из облака Amazon в собственное хранилище
● Rust применяется для оптимизации узких мест
● Реализация алгоритма компрессии Brotli
На практике: MaidSafe
● Распределенная глобальная P2P-сеть
для хранения файлов и платформа для
приложений
● Открытые исходники
● Проект полностью переписан
с C++ на Rust
Ключевые преимущества
● Бесплатные абстракции, скорость, и компиляция в машинный код
Ключевые преимущества
● Безопасность и продвинутая система типов
● Компромисс между скоростью низкоуровневых и удобством
высокоуровневых языков
Небезопасные языки
● Позволяют писать некорректные и небезопасные программы
(Heartbleed в OpenSSL, Shellshock в Bash)
● Используются для сложных и системных задач:
поисковые движки, графические движки для игр, ядра ОС и т.д.
● Бэкенды Google, Яндекса, и других крупнейших проектов используют C++
Проблемы небезопасных языков
● Выделили память, забыли освободить:
void function() {
char *string1 = malloc(5);
char *string2 = malloc(10);
// …
free(string1);
}
Проблемы небезопасных языков
● Освободили память, а указатель остался:
void function(pair *p) {
char *entry = malloc(5);
p->first = entry;
// …
free(entry);
}
Проблемы небезопасных языков
● Выход за границы выделенной памяти:
void function() {
char *string = malloc(2);
string[0] = ‘h’;
string[1] = ‘i’;
string[6784745] = ‘?’;
}
Решение проблем: сборка мусора
● Автоматические освобождение неиспользуемой памяти
● Большинство современных языков использует GC:
Google Go, Java, C#, Ruby, Python, JavaScript, Haskell, и многие другие
● Недостатки: “остановка мира” и сниженная производительность
Подход Rust
● Автоматическое освобождение памяти без сборки мусора
● «Умные указатели»
● Время жизни переменных ограничено областью видимости:
fn main() {
let string = String::new();
// переменная string будет освобождена
// перед выходом из функции
}
Владение
fn main() {
let mut str = String::from(“♥”);
function(str);
…
}
Владение
fn main() {
let mut str = String::from(“♥”);
function(str);
str.push(‘U’); ← ошибка
}
Заимствования
fn main() {
let mut str = String::from(“♥”);
function(&mut str);
str.push(‘U’);
}
«Нулевые указатели — моя главная ошибка
ценой в миллиард долларов»
— Тони Хоар
Безопасные типы в Rust
enum Option<Value> {
Some(Value),
None
}
Альтернатива исключениям в Rust
enum Result<Value, Error> {
Ok(Value),
Err(Error)
}
Альтернатива исключениям в Rust
let result = Ok(42);
match result {
Ok(value) => print!(“{}”, value),
Err(error) => { … }
}
Инструментарий Rust
● Crates.io:
Более 6 800 пакетов с библиотеками.
● Cargo:
Компиляция проекта;
Пакетный менеджер;
Встроенный фреймворк для тестирования
Поддержка
интегрированных сред
разработки
● Дополнение кода и навигация
● Плагины для IntelliJ Idea, Eclipse и Visual
Studio
● Плагин Racer для текстовых редакторов
(Atom, Sublime Text, Emacs, Vim)
Интеграция с другими языками
● Python, Ruby, Node.js
● Поддержка C ABI
● Возможность параллелизации
Сообщество
● Русскоязычное сообщество: 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
Процесс разработки языка
● Добавление новых возможностей языка через процесс RFC
● Стать разработчиком компилятора — легко!
● Цели на 2017:
Более понятный процесс изучения для новичков;
Больше инструментов разработки и лучшая поддержка IDE;
Более высокая скорость компиляции.
Заключение
● Безопасность и скорость без боли
● Революция в мире браузеров за счет стабильной
параллелизации вычислений
● Применение в продакшене только начинается
ООП?
● Rust — не объектно-ориентированный язык
● Модули и структуры вместо классов и объектов
● Типажи вместо интерфейсов
Структуры
● Могут содержать данные
● Могут иметь связанные методы
● Инкапсуляция: контроль доступа к закрытой и открытой части структуры
● Нет возможности наследования
struct User {
login: String,
password: String
}
Типажи
● Задают интерфейс, которому нужно соответствовать
● Форма множественного наследования и полиморфизма
● Методы типажей могут содержать стандартную реализацию
trait Authenticator {
fn login(&self, user: User);
fn login_current(&self) {
self.login(User::current());
}
}
Спасибо за внимание!
Вопросы?
Слайды будут доступны в Твиттере
@nbaksalyar

More Related Content

What's hot

Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)IT-Доминанта
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковElena Grahovac
 
Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Dmitry Savchenko
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Yandex
 
Применение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектахПрименение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектахAlex Chistyakov
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuVladimir Rudnyh
 
Women Techmakers Novosibirsk, первый митап
Women Techmakers Novosibirsk, первый митапWomen Techmakers Novosibirsk, первый митап
Women Techmakers Novosibirsk, первый митапElena Grahovac
 
Go в автобусе
Go в автобусеGo в автобусе
Go в автобусеArtem Kovardin
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Yandex
 
Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Platonov Sergey
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Yandex
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Secr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.jsSecr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.jsKirill Danilov
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Fwdays
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...MoscowJS
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновAnton Piskunov
 

What's hot (20)

Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходников
 
Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
 
Применение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектахПрименение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектах
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.Ru
 
Women Techmakers Novosibirsk, первый митап
Women Techmakers Novosibirsk, первый митапWomen Techmakers Novosibirsk, первый митап
Women Techmakers Novosibirsk, первый митап
 
Go в автобусе
Go в автобусеGo в автобусе
Go в автобусе
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
 
Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Php and frameworks
Php and frameworksPhp and frameworks
Php and frameworks
 
Secr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.jsSecr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.js
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"
 
Use Grunt Luke
Use Grunt LukeUse Grunt Luke
Use Grunt Luke
 
Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демонов
 

Similar to Rust - GDG DevFest Siberia 2016

Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Denis Zakharov
 
Scripting languages
Scripting languagesScripting languages
Scripting languagesLev Panov
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.DrupalForumZP2012
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbitjskonst
 
OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...
OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...
OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...Vadim Ponomarev
 
Язык программирования GO
Язык программирования GOЯзык программирования GO
Язык программирования GOPython Meetup
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Ontico
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...IT Share
 
Создай свое первое Android приложение.
Создай свое первое Android приложение. Создай свое первое Android приложение.
Создай свое первое Android приложение. Kuban Dzhakipov
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Mixing c++ and python
Mixing c++ and pythonMixing c++ and python
Mixing c++ and pythoncorehard_by
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...Rais Charipov
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Ontico
 

Similar to Rust - GDG DevFest Siberia 2016 (20)

Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open Source
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
 
OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...
OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...
OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...
 
Язык программирования GO
Язык программирования GOЯзык программирования GO
Язык программирования GO
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
 
Создай свое первое Android приложение.
Создай свое первое Android приложение. Создай свое первое Android приложение.
Создай свое первое Android приложение.
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Mixing c++ and python
Mixing c++ and pythonMixing c++ and python
Mixing c++ and python
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
 

Rust - GDG DevFest Siberia 2016

  • 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
  • 5.
  • 6. На практике: Redox ● Операционные системы: Redox http://redox-os.org intermezzOS https://intermezzos.github.io/
  • 7. На практике: Dropbox ● Перенос более 500 петабайт из облака Amazon в собственное хранилище ● Rust применяется для оптимизации узких мест ● Реализация алгоритма компрессии Brotli
  • 8. На практике: MaidSafe ● Распределенная глобальная P2P-сеть для хранения файлов и платформа для приложений ● Открытые исходники ● Проект полностью переписан с C++ на Rust
  • 9. Ключевые преимущества ● Бесплатные абстракции, скорость, и компиляция в машинный код
  • 10. Ключевые преимущества ● Безопасность и продвинутая система типов ● Компромисс между скоростью низкоуровневых и удобством высокоуровневых языков
  • 11. Небезопасные языки ● Позволяют писать некорректные и небезопасные программы (Heartbleed в OpenSSL, Shellshock в Bash) ● Используются для сложных и системных задач: поисковые движки, графические движки для игр, ядра ОС и т.д. ● Бэкенды Google, Яндекса, и других крупнейших проектов используют C++
  • 12. Проблемы небезопасных языков ● Выделили память, забыли освободить: void function() { char *string1 = malloc(5); char *string2 = malloc(10); // … free(string1); }
  • 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 будет освобождена // перед выходом из функции }
  • 17. Владение fn main() { let mut str = String::from(“♥”); function(str); … }
  • 18. Владение fn main() { let mut str = String::from(“♥”); function(str); str.push(‘U’); ← ошибка }
  • 19. Заимствования fn main() { let mut str = String::from(“♥”); function(&mut str); str.push(‘U’); }
  • 20. «Нулевые указатели — моя главная ошибка ценой в миллиард долларов» — Тони Хоар
  • 21. Безопасные типы в Rust enum Option<Value> { Some(Value), None }
  • 22. Альтернатива исключениям в Rust enum Result<Value, Error> { Ok(Value), Err(Error) }
  • 23. Альтернатива исключениям в Rust let result = Ok(42); match result { Ok(value) => print!(“{}”, value), Err(error) => { … } }
  • 24. Инструментарий Rust ● Crates.io: Более 6 800 пакетов с библиотеками. ● Cargo: Компиляция проекта; Пакетный менеджер; Встроенный фреймворк для тестирования
  • 25. Поддержка интегрированных сред разработки ● Дополнение кода и навигация ● Плагины для IntelliJ Idea, Eclipse и Visual Studio ● Плагин Racer для текстовых редакторов (Atom, Sublime Text, Emacs, Vim)
  • 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()); } }
  • 33. Спасибо за внимание! Вопросы? Слайды будут доступны в Твиттере @nbaksalyar