Rust: абстракции и безопасность, совершенно бесплатно (видеозапись с выступления на митапе Saratov Open-IT)

Привет.В прошлую субботу я выступал с докладом на очередном митапе Saratov Open-IT, где я рассказал про Rust — многообещающий системный язык программирования, разрабатываемый Mozilla Research и сообществом, и про то, какие проблемы он решает и какие у него есть особенности и инфраструктура. Надеюсь, что моё выступление будет интересно сообществу, поэтому выкладываю его здесь.

(видео не вставлено в пост через тег

Я изучаю Rust и участвую в его сообществе уже около полутора лет. Вообще основной платформой, программированием для которой я занимаюсь, является JVM, но мне всегда хотелось писать программы, работающие нативно — какие-то утилиты для Linux, лёгкие кроссплатформенные программы, и прочее подобное. Однако писать на C++ или C мне совершенно не хотелось. C++ — это огромный и очень сложный язык, с большим количеством возможностей (количество которых растёт с каждым новым стандартом), который трудно использовать правильно, не имея сильной самодисциплины и длительного опыта работы с ним. C, с другой стороны, очень прост, но и очень невыразителен — после языков типа Scala на нём трудно писать, потому что в нём отсутствует множество уже ставших привычными возможностей (вроде анонимных функций), нет хорошей стандартной библиотеки, и всё же С очень сильно привязан к платформе — многие вещи на нём делаются через условную компиляцию и обращение к самым низкоуровневым средствам ОС.

Rust же стремится закрыть эту нишу между языками низкого и высокого уровня. С одной стороны, он настолько же «близок к железу», как и C/C++, а с другой стороны, он обеспечивает безопасность и абстракции, которые гораздо ближе к языкам более высокого уровня. Всё это обеспечивается за счёт мощного статического анализа, благодаря которому программы, написанные на Rust, гарантированно работают с памятью корректно. Ощущение было как в первое время после изучения Haskell — поражаешься тому факту, что программа, которая прошла компиляцию, всегда работает правильно :)

Ещё одним преимуществом Rust по сравнению с C/C++ является его инфраструктура, в частности, его менеджер пакетов Cargo. Благодаря Cargo кроссплатформенные программы на Rust писать настолько же просто, насколько пишутся такие программы на языках вроде Java и Python. Проект Cargo содержит манифест, где описываются все его Rust-зависимости и (там где нужно) правила сборки С-зависимостей. Для того, чтобы получить собранный бинарник, достаточно набрать cargo build в терминале — все зависимости автоматически скачаются, соберутся и подключатся к вашему проекту. По сравнению с необходимостью использовать инструменты вроде autoconf или cmake, которые делегируют ответственность за сторонние библиотеки на пользователя системы, Cargo делает сборку программ на Rust гораздо ближе к интерпретируемым/динамическим языкам, в которых точно также вы получаете рабочую программу с помощью одной команды.

Кроме того, совсем недавно открылся центральный репозиторий Cargo-пакетов, который станет ядром будущей стабильной экосистемы вокруг Rust — crates.io. Уже сейчас там больше 400 пакетов. Естественно, Cargo сможет по-прежнему пользоваться мастер-ветками из репозиториев, но crates.io станет сосредоточением стабильных версий пакетов. Предполагается, что за счёт повсеместного применения semantic versioning обновлять зависимости ваших проектов будет безболезненно и просто. Кстати, про план стабилизации языка вы можете прочитать в моих переводах блог-постов от разработчиков Rust, здесь и здесь.

В целом, в свете предстоящей стабилизации языка, мне кажется, сейчас самое время для начала популяризации Rust в более широком сообществе разработчиков. Сейчас в Rust идёт очень активная подготовка к релизу первой стабильной версии, многие самые ожидаемые фичи языка и библиотек принимают окончательную форму. Ещё немного, и язык станет полностью готов для промышленного использования.

Примерный план моего рассказа (в видео):

место Rust среди других языков, какие проблемы он решает краткий обзор синтаксиса и системы типов Rust полиморфизм в Rust, дженерики, трейты и trait objects концепции владения данными и заимствования — основа безопасности Rust многопоточность и отсутствие гонок данных в программах на Rust когда нужны unsafe-операции инфраструктура Rust существующие проекты на Rust полезные ссылки Прошу прощения, иногда я забывал проговорить вопросы из зала в микрофон, и из-за этого не всегда понятно, на что я отвечаю :(Презентация к докладу доступна по этой ссылке.

© Habrahabr.ru