Почему Rust может заменить C?

Roman Biriukov
Заметки про Evrone
4 min readSep 25, 2020

Rust — амбициозный проект компании Mozilla, язык программирования, который по задумке создателей должен стать следующей ступенью эволюции C и C++.

В Evrone язык Rust применяется на многих проектах, и наши инженеры накопили большую экспертизу в этом направлении. В публикации мы расскажем об особенностях Rust.

Сравниваем Rust и C\C++
Сравниваем Rust и C\C++

За годы существования этих языков многие неприятные базовые вещи, вроде ошибок сегментации, ручного управления памятью, повышенных рисков допустить утечку памяти и непредсказуемого поведения компилятора, в полной мере так и не исключены. Rust призван избавить от этих недостатков, в то же время обеспечив более высокую производительность и безопасность.

Чем примечателен язык:

  • Сильная статическая типизация.
  • Отсутствие сборки мусора и возможность самостоятельно с помощью указателей контролировать место размещения данных в памяти.
  • Мощный встроенный статический анализатор кода, который позволяет избегать ошибок, связанных с управлением памятью и многопоточностью.
  • C-подобный синтаксис с лаконичными ключевыми словами.
Семейное дерево​ Rust
Семейное дерево​ Rust

История Rust

Работу над Rust начал в 2006 году энтузиаст Грэйдон Хор. В 2009-м проектом заинтересовалась Mozilla, и уже спустя год был дан публичный анонс нового языка программирования.

Альфа-версия Rust появилась в 2012 году. Через год авторы браузерного движка Servo на базе этого языка сообщили, что их детище получило поддержку Samsung. Благодаря этому удалось портировать код движка на ARM-архитектуру.

Версия Rust 1.0 была представлена в мае 2015 года. В том же году язык занял третье место в опросе Stack Overflow о любимых инструментах разработчиков. Начиная с 2016 года Rust регулярно возглавляет этот список.

​История Rust
​История Rust

Плюсы и минусы Rust

Преимущества:

  • Единый компилятор от разработчиков Rust со встроенным менеджером и сборщиком пакетов, системой тестов и генератором документации.
  • Безопасная работа с памятью, не допускающая ошибок сегментации.
  • Возможность применять абстракции, облегчающие ручное управление памятью.
  • Для многих ошибок во время компиляции приводятся варианты исправления, ошибки в шаблонах понятны и лаконичны.
  • Указатели можно использовать только в небезопасном коде, в безопасном коде применяются исключительно ссылки на гарантированно существующие объекты.
  • Хорошо совместим с Mac и Unix-подобными системами.

Недостатки:

  • Отсутствие классов и наследования, что затрудняет написание кода в объектно-ориентированной парадигме.
  • Очень строгий компилятор кода, иногда чересчур сильно контролирующий обращения к памяти.
Сравнение ​Rust с С и С++
Сравнение ​Rust с С и С++

Сфера применения Rust

Данный язык поддерживает основные парадигмы программирования: объектно-ориентированное, параллельное, функциональное и процедурное. Rust универсален и подходит для решения различных задач: разработки операционных систем, программ общего назначения, веб-серверов и клиентов, систем мониторинга серверов, разработки инфраструктуры, приложений для мониторинга системы, блокчейн-сетей, игровых и браузерных движков.

Операционные системы и программное обеспечение

Rust создавался в первую очередь как язык системного программирования. Он предоставляет достаточно возможностей для управления памятью и защиты от уязвимостей, чтобы стать востребованным инструментом для разработки операционных систем и ключевых приложений. Главная проблема языка — низкая поддержка со стороны производителей «железа», предпочитающих использовать для работы именно С/С++.

Успешные проекты:

  • Redox, Unix-подобная операционная система, базирующаяся на микроядре. Основная часть ПО для этой ОС также написана на Rust.
  • Servo, браузерный движок с поддержкой многопоточности.
  • Система микровиртуализации, созданная преимущественно под serverless окружения Firecracker.

Применение Rust в разработке Blockchain

Системы на базе распределенного реестра должны уметь быстро обрабатывать запросы внутри сети при минимальной нагрузке на устройство. Инструментарий С++ отлично справляется с этой задачей (именно на нем работают блокчейны Bitcoin и Ethereum), а посему разработка инфраструктуры с использованием Rust окажется еще эффективнее.

Успешные проекты:

  • https://www.parity.io/ — альтернативный клиент Ethereum и Bitcoin.
  • https://polkadot.network/ — гетерогенные блокчейн-сети.
  • Exonum, фреймворк для создания блокчейн-проектов.
  • MaidSafe, распределенная система хранения и обработки данных.
  • Solana, платформа для создания блокчейн-приложений.

Разработка веб-серверов на Rust

Уже сейчас Rust может использоваться для полноценного создания веб-проектов, инструментарий языка позволяет создать и фронт-энд, и бэк-энд. Клиентская часть реализуется, например, на вдохновленном React и Angular фреймворке Yew. Простая разработка веб-серверов на Rust возможна благодаря actix-web — очень производительному фреймворку, поддерживающему WebSockets, TLS и HTTP/2.0. Также доступны другие инструменты: rocket, conduit, gotham, pencil.

Успешные проекты:

  • Dropbox, облачное хранилище.
  • OpenDNS, веб-сервис, позволяющий использовать общедоступные DNS-серверы.
  • Coursera, образовательный портал, основанный профессорами информатики Стэнфордского университета.

Машинное обучение на Rust

Нейросети на Rust выглядят интересной перспективой. Быстрая работа, низкоуровневый контроль памяти с использованием высокоуровневых абстракций могут помочь Rust API стать более востребованным инструментом. Но пока машинное обучение на данном языке программирования остается областью экспериментов. Экосистеме Rust не хватает готовых, протестированных и надежных библиотек для создания нейросетей, не уступающих по возможностям аналогам на Python.

Будущее Rust

С++ почти 40 лет доминировал среди других языков, успел стать промышленным стандартом и по праву удерживает это звание по сей день. Rust стремительно развивается, дорабатывается и старается решать существенные недостатки С++ и других языков программирования.

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

Разработка с использованием Rust через несколько лет может стать гораздо более востребованной, а в отдаленной перспективе и вовсе потеснить нынешних лидеров.

--

--