Evrone
2 666

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

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

В закладки

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

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

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

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

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

История 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 создавался в первую очередь как язык системного программирования. Он предоставляет достаточно возможностей для управления памятью и защиты от уязвимостей, чтобы стать востребованным инструментом для разработки операционных систем и ключевых приложений. Главная проблема языка — низкая поддержка со стороны производителей «железа», предпочитающих использовать для работы именно С/С++.

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

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

Будущее Rust

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

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

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

{ "author_name": "Evrone", "author_type": "editor", "tags": [], "comments": 26, "likes": 25, "favorites": 12, "is_advertisement": false, "subsite_label": "evrone", "id": 70821, "is_wide": false, "is_ugc": false, "date": "Fri, 07 Jun 2019 14:00:56 +0300" }
{ "id": 70821, "author_id": 250259, "diff_limit": 1000, "urls": {"diff":"\/comments\/70821\/get","add":"\/comments\/70821\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/70821"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 250259, "last_count_and_date": null }

26 комментариев 26 комм.

Популярные

По порядку

Написать комментарий...
2

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

Ответить
2

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

Ответить
2

С++ почти 40 лет доминировал среди других языков

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

Ответить
2

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

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

Ответить
1

засим плодит костыльные языки, на которых сранвительно легко начать писать код,

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

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

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

Ответить
0

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

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

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

Ответить
2

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

Ответить
0

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

Ответить
0

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

Ответить
0

В условиях, когда вчерашний студент хочет $1000 в месяц со старта, память и процессор стоят непомерно дешево. Выделенный сервер с Xeon 4 ядра и 64ГБ оперативной памяти стоит 12к в месяц. Недавно видел где-то пулл реквест, в котором просто увеличили максимальный размер памяти потребляемый инстансом node.js до 8Гб, вместо того чтобы утечку памяти править. Это печально, но такие реалии. Абстракции, которые дают "новомодные" языки аффектят производительность меньше (в денежном выражении), чем они удешевляют разработку.

Ответить
2

Для того чтобы "прочувствовать" Rust, как замену Си рекомендую почитать tutorial по написанию своей мини операционной системы https://os.phil-opp.com/. На самом деле такое можно сделать только на Си, практически не надо рантайм реализовывать. Вот пример простенького bare metal загрузчика для RaspberryPi 3 https://github.com/rust-embedded/rust-raspi3-OS-tutorials/blob/master/07_abstraction/raspi3_boot/src/lib.rs#L81 . Выглядит как любая современная разработка, добавляете cargo пакет, в котором есть необходимые абстракции для работы с регистрами процессора, пишете высокоуровневый код, который манипулирует регистрами как объектами, а внутри это реализовано как максросы, и у вас в этот момент даже стек не инициализирован.
Мне бы хотелось попробовать веб сервис на actix написать, но я думаю, что на go получится быстрее, а выигрышь в производительности будет не радикально сильно выше.

Ответить
–1

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

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

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

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

Ответить
3

Я не профессиональный разработчик

C - простой язык

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

Ответить
1

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

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

Ответить
1

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

Ответить
1

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

Ответить
–4

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

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

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

Ответить
1

особенно по сравнению с Java / C# / Scala? Или, прости Господи, Python / JavaScript?

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

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

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

Ответить
2

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

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

Ответить
1

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

Ответить
1

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

Ответить
0

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

Ответить
0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Хакеры смогли обойти двухфакторную
авторизацию с помощью уговоров
Подписаться на push-уведомления
{ "page_type": "default" }