SlideShare a Scribd company logo
1 of 32
Download to read offline
#DevFest16 #GDGNN #DevFestNN16 #DevFestNN
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
Ключевые преимущества
● Бесплатные абстракции, скорость, и компиляция в машинный код
Ключевые преимущества
● Безопасность и продвинутая система типов
● Компромисс между скоростью низкоуровневых и удобством
высокоуровневых языков
Небезопасные языки
● Позволяют писать некорректные и небезопасные программы
(Heartbleed в OpenSSL, Shellshock в Bash)
● Используются для сложных и системных задач:
поисковые движки, графические движки для игр, ядра ОС и т.д.
● Бэкенды Google, Яндекса, и других крупнейших проектов используют C++
Проблемы небезопасных языков
● Выделили память, забыли освободить:
void function() {
char *string1 = malloc(5);
char *string2 = malloc(10);
// …
free(string1);
}
Подход Rust
● Автоматическое освобождение памяти без сборки мусора
● «Умные указатели»
● Время жизни переменных ограничено областью видимости:
fn main() {
let string = String::new();
// переменная string будет освобождена
// перед выходом из функции
}
Альтернативное решение: сборка мусора
● Автоматические освобождение неиспользуемой памяти
● Большинство современных языков использует GC:
Google Go, Java, C#, Ruby, Python, JavaScript, Haskell, и многие другие
● Недостатки: “остановка мира” и сниженная производительность
Проблемы небезопасных языков
● Освободили память, а указатель остался:
void function(pair *p) {
char *entry = malloc(5);
p->first = entry;
// …
free(entry);
}
Владение
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’);
}
Проблемы небезопасных языков
● Выход за границы выделенной памяти:
void function() {
char *string = malloc(2);
string[0] = ‘h’;
string[1] = ‘i’;
string[6784745] = ‘?’;
}
«Нулевые указатели — моя главная ошибка
ценой в миллиард долларов»
— Тони Хоар
Безопасные типы в Rust
enum Option<Value> {
Some(Value),
None
}
let value1 = Some(123);
let value2 = None;
Альтернатива исключениям в Rust
enum Result<Value, Error> {
Ok(Value),
Err(Error)
}
let success = Ok(42);
let error = Err(“Хьюстон, у нас проблема”);
Альтернатива исключениям в Rust
let result = Ok(42);
match result {
Ok(value) => print!(“{}”, value),
Err(error) => { … }
}
ООП?
● Rust — не объектно-ориентированный язык
● Модули и структуры вместо классов и объектов
● Типажи вместо интерфейсов
Структуры
● Могут содержать данные
● Могут иметь связанные методы
● Инкапсуляция: контроль доступа к закрытой и открытой части структуры
● Нет возможности наследования
struct User {
login: String,
password: String
}
Типажи
● Похожи на тайпклассы в Haskell и типажи в Scala
● Форма множественного наследования и полиморфизма
● Методы типажей могут содержать стандартную реализацию
trait Authenticator {
fn login(&self, user: &str, password: &str);
fn login_default(&self) {
self.login(“Crash_Override”, “password”);
}
}
Типажи
● Можно добавлять методы к чужим структурам
trait Hello {
fn say_hello(&self);
}
Типажи
● Можно добавлять методы к чужим структурам
impl Hello for String {
fn say_hello(&self) {
println!(“Привет, {}!”, self);
}
}
Типажи
● Можно добавлять методы к чужим структурам
…
"мир".to_string().say_hello();
→ "Привет, мир!"
Инструментарий Rust
● Crates.io:
Более 7 000 пакетов с библиотеками.
● 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
Чат в Telegram: https://telegram.me/proRust
Форум: https://forum.rustycrate.ru/
● Книга “Язык программирования Rust” на русском:
http://rurust.github.io/rust_book_ru/
● События: Rust Moscow Meetup,
CoLaboratory: Rust в Kaspersky Lab
Процесс разработки языка
● Добавление новых возможностей языка через процесс RFC
● Стать разработчиком компилятора — легко!
● Цели на 2017:
Более понятный процесс изучения для новичков;
Больше инструментов разработки и лучшая поддержка IDE;
Более высокая скорость компиляции.
Заключение
● Безопасность и скорость без боли
● Революция в мире браузеров за счет стабильной
параллелизации вычислений
● Применение в продакшене только начинается
Спасибо за внимание!
Вопросы?
Слайды будут доступны в Твиттере
@nbaksalyar

More Related Content

What's hot

Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Dmitry Savchenko
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)IT-Доминанта
 
Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования GoElena Grahovac
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Fwdays
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентовNikolay Samokhvalov
 
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Badoo Development
 
Язык программирования GO
Язык программирования GOЯзык программирования GO
Язык программирования GOPython Meetup
 
Кроссплатформенная разработка на Haxe
Кроссплатформенная разработка на HaxeКроссплатформенная разработка на Haxe
Кроссплатформенная разработка на HaxeEugene Veretennikov
 
Обзор Haxe & OpenFl
Обзор Haxe & OpenFlОбзор Haxe & OpenFl
Обзор Haxe & OpenFlDevOWL Meetup
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовYandex
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...MoscowJS
 
Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Platonov Sergey
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Oleg Poludnenko
 

What's hot (20)

Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
 
Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования Go
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"
 
Golang
GolangGolang
Golang
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
 
Язык программирования GO
Язык программирования GOЯзык программирования GO
Язык программирования GO
 
Кроссплатформенная разработка на Haxe
Кроссплатформенная разработка на HaxeКроссплатформенная разработка на Haxe
Кроссплатформенная разработка на Haxe
 
Обзор Haxe & OpenFl
Обзор Haxe & OpenFlОбзор Haxe & OpenFl
Обзор Haxe & OpenFl
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
 
Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
 

Similar to Rust - GDG DevFest 2016 Nizhny Novgorod

Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
 
Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистовKonstantin Cherkasov
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
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
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)Ontico
 
Scripting languages
Scripting languagesScripting languages
Scripting languagesLev Panov
 
Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bashkuchinskaya
 
Инструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаИнструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаcorehard_by
 
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)Ontico
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...Rais Charipov
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration managementAlexander Kirillov
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
 

Similar to Rust - GDG DevFest 2016 Nizhny Novgorod (20)

Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистов
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
php frameworks
php frameworksphp frameworks
php frameworks
 
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.
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bash
 
Инструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаИнструменты профайлинга С++ кода
Инструменты профайлинга С++ кода
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
 
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
Кратко о Linux
Кратко о LinuxКратко о Linux
Кратко о Linux
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
About Python
About PythonAbout Python
About Python
 

Rust - GDG DevFest 2016 Nizhny Novgorod

  • 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. Ключевые преимущества ● Безопасность и продвинутая система типов ● Компромисс между скоростью низкоуровневых и удобством высокоуровневых языков
  • 7. Небезопасные языки ● Позволяют писать некорректные и небезопасные программы (Heartbleed в OpenSSL, Shellshock в Bash) ● Используются для сложных и системных задач: поисковые движки, графические движки для игр, ядра ОС и т.д. ● Бэкенды Google, Яндекса, и других крупнейших проектов используют C++
  • 8. Проблемы небезопасных языков ● Выделили память, забыли освободить: void function() { char *string1 = malloc(5); char *string2 = malloc(10); // … free(string1); }
  • 9. Подход Rust ● Автоматическое освобождение памяти без сборки мусора ● «Умные указатели» ● Время жизни переменных ограничено областью видимости: fn main() { let string = String::new(); // переменная string будет освобождена // перед выходом из функции }
  • 10. Альтернативное решение: сборка мусора ● Автоматические освобождение неиспользуемой памяти ● Большинство современных языков использует GC: Google Go, Java, C#, Ruby, Python, JavaScript, Haskell, и многие другие ● Недостатки: “остановка мира” и сниженная производительность
  • 11. Проблемы небезопасных языков ● Освободили память, а указатель остался: void function(pair *p) { char *entry = malloc(5); p->first = entry; // … free(entry); }
  • 12. Владение fn main() { let mut str = String::from(“♥”); function(str); … }
  • 13. Владение fn main() { let mut str = String::from(“♥”); function(str); str.push(‘U’); ← ошибка }
  • 14. Заимствования fn main() { let mut str = String::from(“♥”); function(&mut str); str.push(‘U’); }
  • 15. Проблемы небезопасных языков ● Выход за границы выделенной памяти: void function() { char *string = malloc(2); string[0] = ‘h’; string[1] = ‘i’; string[6784745] = ‘?’; }
  • 16. «Нулевые указатели — моя главная ошибка ценой в миллиард долларов» — Тони Хоар
  • 17. Безопасные типы в Rust enum Option<Value> { Some(Value), None } let value1 = Some(123); let value2 = None;
  • 18. Альтернатива исключениям в Rust enum Result<Value, Error> { Ok(Value), Err(Error) } let success = Ok(42); let error = Err(“Хьюстон, у нас проблема”);
  • 19. Альтернатива исключениям в Rust let result = Ok(42); match result { Ok(value) => print!(“{}”, value), Err(error) => { … } }
  • 20. ООП? ● Rust — не объектно-ориентированный язык ● Модули и структуры вместо классов и объектов ● Типажи вместо интерфейсов
  • 21. Структуры ● Могут содержать данные ● Могут иметь связанные методы ● Инкапсуляция: контроль доступа к закрытой и открытой части структуры ● Нет возможности наследования struct User { login: String, password: String }
  • 22. Типажи ● Похожи на тайпклассы в Haskell и типажи в Scala ● Форма множественного наследования и полиморфизма ● Методы типажей могут содержать стандартную реализацию trait Authenticator { fn login(&self, user: &str, password: &str); fn login_default(&self) { self.login(“Crash_Override”, “password”); } }
  • 23. Типажи ● Можно добавлять методы к чужим структурам trait Hello { fn say_hello(&self); }
  • 24. Типажи ● Можно добавлять методы к чужим структурам impl Hello for String { fn say_hello(&self) { println!(“Привет, {}!”, self); } }
  • 25. Типажи ● Можно добавлять методы к чужим структурам … "мир".to_string().say_hello(); → "Привет, мир!"
  • 26. Инструментарий Rust ● Crates.io: Более 7 000 пакетов с библиотеками. ● Cargo: Компиляция проекта; Пакетный менеджер; Встроенный фреймворк для тестирования
  • 27. Поддержка интегрированных сред разработки ● Дополнение кода и навигация ● Плагины для IntelliJ Idea, Eclipse и Visual Studio ● Плагин Racer для текстовых редакторов (Atom, Sublime Text, Emacs, Vim)
  • 28. Интеграция с другими языками ● Python, Ruby, Node.js ● Поддержка C ABI ● Возможность параллелизации
  • 29. Сообщество ● Русскоязычное сообщество: 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
  • 30. Процесс разработки языка ● Добавление новых возможностей языка через процесс RFC ● Стать разработчиком компилятора — легко! ● Цели на 2017: Более понятный процесс изучения для новичков; Больше инструментов разработки и лучшая поддержка IDE; Более высокая скорость компиляции.
  • 31. Заключение ● Безопасность и скорость без боли ● Революция в мире браузеров за счет стабильной параллелизации вычислений ● Применение в продакшене только начинается
  • 32. Спасибо за внимание! Вопросы? Слайды будут доступны в Твиттере @nbaksalyar