Рассказываем об особенностях Rust и прогнозируем его будущее
Создатели Rust обещают, что их язык затмит собой C и С++. Разработчики Evrone использовали его в ряде действующих проектов, каждый из которых позволил нам набрать внушительный опыт. В статье поделимся нашими выводами о применении языка и его возможном будущем.
В C и С++ есть общепризнанные проблемные моменты, с которыми программистам приходится иметь дело из раза в раз. Это и трудности при компиляции, и высокий шанс утечки памяти, сам процесс управления этой памятью вручную, известные ошибки segfault. Задача Rust — обойти эти недоработки, одновременно увеличив производительность и повысив безопасность.
Что особенного в Rust?
- Лаконичный синтаксис с ключевиками, похож на синтаксис C.
- Кодовый анализатор, помогающий не допускать утечек памяти и не совершать ошибок при работе с многопоточностью.
- Самостоятельное управление расположением данных в памяти (используя указатели).
- Нет garbage collection.
- Мощная статистическая типизация.
История языка
Разработкой языка занялся в свободное время сотрудник Mozilla Грэйдон Хор 14 лет назад, в 2006. Три года он действовал самостоятельно, пока в 2009-м к работе официально не подключилась Mozilla. В 2010 Rust был представлен официально.
Первый альфа-релиз языка состоялся в 2012. На Rust был разработан Servo, движок для веб-браузеров. В 2013 к работе над Servo присоединился Samsung, в результате чего код Servo был портирован на ARM-архитектуру.
Rust 1.0 вышел в 2015. В свой первый год Rust взял бронзу в голосовании «Любимый язык программирования» на портале Stack Overflow. Все последующие годы Rust занимает только первое место.
Преимущества и недостатки
Аргументы «за»:
- без проблем работает на Unix и Mac;
- есть абстракции, которые существенно упрощают регулирование памяти вручную;
- надёжная система взаимодействия с памятью, исключающая ошибки сегментации;
- автоматическое представление способов исправить ошибки при компиляции;
- компилятор содержит сборщик и менеджер пакетов, инструменты для тестирования и создания документации;
- в безопасном коде нет возможности применять указатели (только ссылки на 100% реальные объекты);
- доступное описание ошибок в шаблонах.
Аргументы «против»:
- Компилятор слишком строго фиксирует вызовы к памяти;
- Нет типичных для ООП-стиля наследования и классов.
Где нужен Rust?
Код на Rust соответствует четырём главным концепциям в программировании: процедурное, параллельное, функциональное и ООП. Поэтому Rust — разносторонний язык, который можно применять во многих сферах. Например:
- программирование клиентских приложений и веб-серверов;
- blockchain;
- создание собственных ОС;
- написание программ и приложений по мониторингу систем и серверов;
- разработка ПО общего назначения;
- создание инфраструктуры;
- написание движков для браузеров и игр.
ПО и операционки
Rust спроектировали именно для системной разработки. В нём есть все необходимые функции для работы с памятью и противодействия уязвимостям, чтобы использоваться для создания ключевых программ и операционных систем. Единственное, что создаёт помеху этому, — недостаточная поддержка от «железа», производители которого привыкли к тому, что все применяют C или C++. Вот несколько удачных реализаций:
- многопоточный движок для браузера Servo;
- гипервизор Firecracker, разработанный в основном под бессерверную архитектуру;
- микроядерная ОС Redox.
Rust и блокчейн-проекты
Одно из важнейших требований блокчейн-сетей — высокая скорость работы внутри сети при низком уровне нагрузки серверов. Многие блокчейны (например Ethereum или Bitcoin) используют для реализации таких условий функционал C++. Учитывая сказанное выше, создание инфраструктуры на Rust будет более результативным. Вот примеры использования в blockchain:
- сервис для разработки блокчейн-проектов Solana;
- фреймворк для тех же целей Exonum;
- неофициальный клиент для Ethereum и Bitcoin — Parity.io;
- децентрализованная платформа хранения и работы с информацией MaidSafe;
- гетерогенные blockchain-сети polkadot.network.
Rust и web-приложения
В Rust есть всё необходимое для разработки веб-приложений. Его функционал подходит и для frontend, и для backend. Для создания фронтенда можно использовать Yew, аналог React для Rust. Удобная и функциональная разработка серверов доступна в actix-web, крайне эффективном фреймворке, включающем в себя работу с HTTP/2.0, WebSockets и TLS. Но, разумеется, только им Rust не ограничивается, технологий много: pencil, conduit, rocket, gotham. Вот примеры проектов:
- сервис онлайн-обучения Coursera, созданный преподавателями Стэнфорда;
- файловый и облачный хостинг Dropbox;
- проект OpenDNS, который помогает находить доступные DNS-сервера.
Rust и нейросети
На сегодняшний день нейросети на Rust — это в основном эксперименты. Язык выглядит довольно притягательным для машинного обучения: низкоуровневая работа с памятью и при этом применение высокоуровневых абстракций, а также высокая производительность языка. Всё это работает на Rust API и сулит ему большую популярность. Но пока в экосистеме Rust практически нет на 100% испытанных и безопасных фреймворков для разработки нейросетей, способных составить конкуренцию библиотекам на Python.
Что будет с Rust дальше?
За практически 40 лет C++ выбился в лидеры отрасли, сохраняет это лидерство и считается стандартом разработки. Rust — молодой язык, который постоянно меняется, эволюционирует, пытаясь решить известные недочеты не только C++, но и остальных языков.
Из проектов, где мы использовали Rust, нам особенно нравится ERP-проект для сети ресторанов: микросервис, показывающий данные о наиболее близкой к пользователю точке. Не менее занимательна система постоянной интеграции Evrone, где на Rust реализованы системы логирования, диспетчеризации и распределения задач, управляющий изоляцией агент, закупка виртуальных машин в автоматическом режиме и многое другое.
Прогноз Evrone: Rust будет становиться все более востребованным языком, и вполне возможно, что при должном развитии и доработках он сможет обойти главных сегодняшних конкурентов.