Языковое замещение, или Почему Rust сменяет C

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

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

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

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

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

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

История Rust

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

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

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

​История Rust

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

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

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

Недостатки:

  • Отсутствие классов и наследования, что затрудняет написание кода в объектно ориентированной парадигме.
  • Очень строгий компилятор кода, иногда чересчур сильно контролирующий обращения к памяти.
Сравнение ​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 стремительно развивается, дорабатывается и старается решать существенные недостатки С++ и других языков программирования.

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

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

0
28 комментариев
Написать комментарий...
Камаз Узбеков
С++ почти 40 лет доминировал среди других языков

Кек. Уже в начале нулевых все, кто мог, в ужасе сьебали на джаву/сишарп. Остался только геймдев и вот всякие браузеры

Ответить
Развернуть ветку
Boris Lissov

Беда в том, что тырпрайз хочет дешевых программистов, засим плодит костыльные языки, на которых сранвительно легко начать писать код, который не крашится в сегфолт или не глючит как-нибудь слишком уж часто.

На выходе имеем людей, пишущих софт для управления предприятием, и не представляющих, как работает стандартная библиотека.

Ответить
Развернуть ветку
Камаз Узбеков
засим плодит костыльные языки, на которых сранвительно легко начать писать код,

Не вижу ничего костыльного в высокоуровневых языках.

не представляющих, как работает стандартная библиотека

Не уверен, что всем этим людям обязательно уметь реализовывать strtod на границе точности флоата. Шумахер может не знать, как работает ДВС, от него требуются совсем другие скиллы.

Ответить
Развернуть ветку
Boris Lissov
Шумахер может не знать, как работает ДВС, от него требуются совсем другие скиллы.

Шумахер как раз должен знать, как работает ДВС и много чего в автомобиле чтобы эффективно ездить. (В т.ч. он должен очень хорошо разбираться в работе коробки передач, тормозной системы и т.д.)

Ему совсем не обязательно быть механиком, собирающим и разбирающим ДВС (архитектором ЯП в нашем примере). Но знать то, на чем ездишь - надо. Иначе пилот просто не будет знать технических пределов своего спортивного снаряда.

Ответить
Развернуть ветку
Amo Nix
языки, на которых сранвительно легко начать писать код,

Хм.. я думал желание иметь простой язык это разумно, а оказывается наоборот...

Ответить
Развернуть ветку
Nikita Kriuchkov

Не знаю с чего начать. Для кого написана данная статья, для технического специалиста ?, но написать статью с заголовком "Почему Rust сменяет C" без конкретики, как-то не очень, на мой взгляд... Как технический специалист, первая мысль, почему С ? Преимущества и недостатки притянуты за уши, чего только стоит: "Отсутствие классов и наследования, что затрудняет написание кода в объектно ориентированной парадигме." Про успешные проекты, процент кода на Rust какой?, Вы можете цифры озвучить ?, насколько я помню даже в FF он около 17%. Разработка веб-серверов, копались в mio или tokio-io ? Неужели понравилось ? А мне вот нет.

Ответить
Развернуть ветку
Евгений Даниленко

Ещё круче https://www.openhub.net/p/firefox/analyses/latest/languages_summary - доля rust вышла на плато в 6.4% около года назад и рост доли не виден.

Ответить
Развернуть ветку
Nikita Kriuchkov

Или для вас С++20 и С одно и тоже ?

Ответить
Развернуть ветку
bzzztomas77

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

Ответить
Развернуть ветку
Vitold S.

Выходит интересная штука, что память и процессор стоит меньше чем работа опытного программиста на Си и выходит, что нанять какого-то вчерашнего студента оптимальнее (который и наделает ошибок с этой самой памятью). Прям печально и грустно это все ... Отсюда и корни растут этих всех новомодных языком на мой взгляд.

Ответить
Развернуть ветку
bzzztomas77

зависит от ситуации. положим ядра ОС и проч. не делаются на "новых" - потому что потом они окажутся узким местом.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Boris Lissov

Я не профессиональный разработчик, но с т.з. мимокрокодила Rust выглядит очередным КГ/АМ от неосиляторов энтерпрайза.

C - простой язык. Написанная на нем программа делает в точности то, что скажут. Если сказали то, что не подразумевали - проблема тупорылого разработчика.

C++ - сложный язык. Надстройка над C, точнее прямо дикая "анафилада лабиринтов", надстроенная над языком неоптимальным образом (Objective-C справился лучше). При умелом использовании - полезная вещь, при неумелом... "сёр, зе програм сендс маллок реквест ту де вронг ареа анд гет сегфаолт иф ю юз зис фичёр, сёр".

Rust - ненужный язык, т.к. есть или C++ чтобы делать все абстрактно, или C, чтобы делать все конкретно, или Java или C# (оба с JIT-компиляцией) чтобы делать все кросплатформенно.

Ответить
Развернуть ветку
Камаз Узбеков
Я не профессиональный разработчик
C - простой язык

Ну так бы сразу и сказал, что не имеешь опыта отладки

Ответить
Развернуть ветку
bzzztomas77

я имею опыт отладки на Си, больше 20 лет им пользуюсь. мой нынешний проект - 750 тысяч строк на Си (без тестов и проч). очень рад, что на Си все еще можно программировать. что я могу выделить память когда мне нужно и освободить тоже когда мне нужно. или не освободить. и не насиловать интернет и себя вопросами про то как работает этот GC.

Ответить
Развернуть ветку
Vitold S.

Можно использовать Memory Pool на Си и с метками goto (почти как defer в некоторых языках), которые в нужных местах освобождают эти самые пулы (ну да нужно архитектурить приложение в UML, а не кодить и потом думать). В одном небольшем инструментике использовал - полетом остался доволен. Бывает периодами ошибки вылезают, но в целом и GC (ref. count) и на там же Си вполне сносно можно сделать. Так что было б желание, а прикрутить какую-то приблуду из языков можно если захотеть.

Ответить
Развернуть ветку
bzzztomas77

ref.count - это такое очень примитивное GC, что язык не поворачивается нызвать его GC ;)

Ответить
Развернуть ветку
Boris Lissov

Ну, положим, мой предел программирования на C - курсач для вуза и его отладка, да.

В OpenBSD (система, с которой я пишу), разработчики откинули предложение внедрить Rust влет: https://marc.info/?t=151233221700001&r=1&w=2 .

Ответить
Развернуть ветку
Anton Barhan

Звучит интересно)
Где почитать подробнее?

Ответить
Развернуть ветку
Vitold S.

Учебник у Rust есть, а там можно надолго зависнуть https://rurust.github.io/rust_book_ru/src/INTRODUCTION.html

Ответить
Развернуть ветку
Victor Malov

Давайте разделять IT в бизнесе, где бизнес основное - и computer science, и теорию языков - где качество кода, паттерны, масштабируемость - ключевые факторы.

Для бизнеса Rust не нужен. Что он даёт? Только большую скорость, ценой достаточно сложного кода, который долго писать. И зачем бизнесу большая скорость? Язык очень сложный, и вероятно, не очень хорошо спроектированный. Какие преимущества он даёт? Особенно по сравнению с Java / C# / Scala? Или, прости Господи, Python / JavaScript?

У Rust нет большого будущего, как топовый язык уровня Python. У него маленькая ниша. Там он закрепился. Но существенно расти не будет. Чуда "вот-вот сейчас стрельнет...зря я его учил что-ли?" не произойдет.

Ответить
Развернуть ветку
Камаз Узбеков
особенно по сравнению с Java / C# / Scala? Или, прости Господи, Python / JavaScript?

Он совсем в другой нише живёт, и для другого предназначен. В частости, его преимущества пред всеми этими в отсутствии тормозов и сборщика мусора.

топовый язык уровня Python

А питон, мягко говоря, специфический язык, тащить его в прод где бы то ни было, гммм, себе дороже.

Ответить
Развернуть ветку
Victor Malov

Всё верно про Rust. Ниша есть, но сейчас она маленькая. Именно поэтому он не станет популярным.

Тащить Python где бы то ни было не нужно. Но для 90-95% задач бэкенда он работает отлично. Основное преимущество - быстро и качественно. А современные асинхронные http / web-framework-и ещё больше расширяют его область применения + data science / machine learning. На данный момент это лучшее что есть.

Ответить
Развернуть ветку
Ринат Г.

Эт смотря где, не в мск, в городе миллионике зная питон, будешь зарабатывать на жизнь собирая милостыню, в провинции 90% проектов это php. Да и если брать бэк в мск, то месяц назад искал что-нить прикольное в плане работы, ни одного бэка на питоне не видел, в лидерах java/php, кое-где go, ни руби ни питона вообще не встречал, из редких scala и nodejs.

Ответить
Развернуть ветку
stivstivsti

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

Ответить
Развернуть ветку
Paul Marlow

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

Ответить
Развернуть ветку
Елена Новикова

Главная фишка Rust — не простой  и красивый синтаксис (за этим лучше к Python'у), а надежность скомпилированной программы при сохранении ее скорости на уровне C/C++ (тот же Python, как и прочие интерпретируемые языки, делает надежную программу, но медленную). Так, чтобы не пришлось тратить уйму времени на ее отладку и многостороннее тестирование.

Ответить
Развернуть ветку
25 комментариев
Раскрывать всегда