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

в 9:03, , рубрики: Rust, безопасность, доклад, Программирование

Привет.

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

(видео не вставлено в пост через тег <video> потому что он не работает с конкретной временной меткой; длительность — примерно полтора часа)
http://www.youtube.com/watch?v=lmauAUF823k#t=2583

Я изучаю 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 идёт очень активная подготовка к релизу первой стабильной версии, многие самые ожидаемые фичи языка и библиотек принимают окончательную форму. Ещё немного, и язык станет полностью готов для промышленного использования.

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

  1. место Rust среди других языков, какие проблемы он решает
  2. краткий обзор синтаксиса и системы типов Rust
  3. полиморфизм в Rust, дженерики, трейты и trait objects
  4. концепции владения данными и заимствования — основа безопасности Rust
  5. многопоточность и отсутствие гонок данных в программах на Rust
  6. когда нужны unsafe-операции
  7. инфраструктура Rust
  8. существующие проекты на Rust
  9. полезные ссылки

Прошу прощения, иногда я забывал проговорить вопросы из зала в микрофон, и из-за этого не всегда понятно, на что я отвечаю :(

Презентация к докладу доступна по этой ссылке.

Автор: Googolplex

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js