Языковое замещение, или Почему Rust сменяет C
Rust — амбициозный проект компании Mozilla, язык программирования, который по задумке создателей должен стать следующей ступенью эволюции C и C++.
В компании Evrone язык Rust применяется на многих проектах, и наши инженеры накопили большую экспертизу в этом направлении. В публикации мы расскажем об особенностях Rust.
За годы существования этих языков многие неприятные базовые вещи, вроде ошибок сегментации, ручного управления памятью, повышенных рисков допустить утечку памяти и непредсказуемого поведения компилятора, в полной мере так и не исключены. Rust призван избавить от этих недостатков, в то же время обеспечив более высокую производительность и безопасность.
Чем примечателен язык:
- Сильная статическая типизация.
- Отсутствие сборки мусора и возможность самостоятельно с помощью указателей контролировать место размещения данных в памяти.
- Мощный встроенный статический анализатор кода, который позволяет избегать ошибок, связанных с управлением памятью и многопоточностью.
- C-подобный синтаксис с лаконичными ключевыми словами.
История Rust
Работу над Rust начал в 2006 году энтузиаст Грэйдон Хор. В 2009-м проектом заинтересовалась Mozilla, и уже спустя год был дан публичный анонс нового языка программирования.
Альфа-версия Rust появилась в 2012 году. Через год авторы браузерного движка Servo на базе этого языка сообщили, что их детище получило поддержку Samsung. Благодаря этому удалось портировать код движка на ARM-архитектуру.
Версия Rust 1.0 была представлена в мае 2015 года. В том же году язык занял третье место в опросе Stack Overflow о любимых инструментах разработчиков. Начиная с 2016 года Rust регулярно возглавляет этот список.
Плюсы и минусы Rust
Преимущества:
- Единый компилятор от разработчиков Rust со встроенным менеджером и сборщиком пакетов, системой тестов и генератором документации.
- Безопасная работа с памятью, не допускающая ошибок сегментации.
- Возможность применять абстракции, облегчающие ручное управление памятью.
- Для многих ошибок во время компиляции приводятся варианты исправления, ошибки в шаблонах понятны и лаконичны.
- Указатели можно использовать только в небезопасном коде, в безопасном коде применяются исключительно ссылки на гарантированно существующие объекты.
- Хорошо совместим с Mac и Unix-подобными системами.
Недостатки:
- Отсутствие классов и наследования, что затрудняет написание кода в объектно ориентированной парадигме.
- Очень строгий компилятор кода, иногда чересчур сильно контролирующий обращения к памяти.
Сфера применения 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 стремительно развивается, дорабатывается и старается решать существенные недостатки С++ и других языков программирования.
Среди проектов, в которых компания Evrone использует Rust, можно отметить крупную ERP-систему сети ресторанов. В ней на Rust реализуется микросервис, который выдает пользователю информацию о ближайшем заведении. Также интересна реализация на Rust в нашем собственном сервисе непрерывной интеграции Vexor. На этом языке сделана диспетчеризация задач, шедулинг их выполнения и агент, управляющий изоляцией запущенных задач на рабочих машинах, автоматический закупщик мощностей и системы логирования.
Разработка с использованием Rust через несколько лет может стать гораздо более востребованной, а в отдаленной перспективе и вовсе потеснить нынешних лидеров.
С++ почти 40 лет доминировал среди других языковКек. Уже в начале нулевых все, кто мог, в ужасе сьебали на джаву/сишарп. Остался только геймдев и вот всякие браузеры
Беда в том, что тырпрайз хочет дешевых программистов, засим плодит костыльные языки, на которых сранвительно легко начать писать код, который не крашится в сегфолт или не глючит как-нибудь слишком уж часто.
На выходе имеем людей, пишущих софт для управления предприятием, и не представляющих, как работает стандартная библиотека.
Не знаю с чего начать. Для кого написана данная статья, для технического специалиста ?, но написать статью с заголовком "Почему Rust сменяет C" без конкретики, как-то не очень, на мой взгляд... Как технический специалист, первая мысль, почему С ? Преимущества и недостатки притянуты за уши, чего только стоит: "Отсутствие классов и наследования, что затрудняет написание кода в объектно ориентированной парадигме." Про успешные проекты, процент кода на Rust какой?, Вы можете цифры озвучить ?, насколько я помню даже в FF он около 17%. Разработка веб-серверов, копались в mio или tokio-io ? Неужели понравилось ? А мне вот нет.
Ещё круче https://www.openhub.net/p/firefox/analyses/latest/languages_summary - доля rust вышла на плато в 6.4% около года назад и рост доли не виден.
Или для вас С++20 и С одно и тоже ?
слава всевышнему, на наш век хватит еще Си.. вот без этого "программисту не нужно заботиться о памяти, просто купить ее побольше и процессор подороже"
Выходит интересная штука, что память и процессор стоит меньше чем работа опытного программиста на Си и выходит, что нанять какого-то вчерашнего студента оптимальнее (который и наделает ошибок с этой самой памятью). Прям печально и грустно это все ... Отсюда и корни растут этих всех новомодных языком на мой взгляд.