Мы расспросили разработчиков на Rust о возможностях и ограничениях этого языка программирования.
Для чего используется
На первый взгляд универсальный язык программирования Rust используется в основном в операционных системах, консольных утилитах и распределённых web-системах, криптовалютах. Но есть любители применять его в геймдеве, Web 3.0 и других сферах. По сути, это безопасный и высокоуровневый аналог языка C.
Константин Егупов, backend-разработчик
Написание надёжного, сложного, высокопроизводительного кода, который надо поддерживать большой группой разработчиков, — идеальный вариант для применения Rust. В принципе, он может заменить не только C++, но и Java, C#, Scala. В блокчейне Rust распространился потому, что позволяет удобно и безопасно описывать сложную логику, а также потому, что в блокчейне было много проектов, написанных с нуля и готовых попробовать новый язык.
Модный нынче ML? В нейросетях царствуют уже готовые модули на Python, C++ и языках для GPU типа CUDA. Rust там пока не очень нужен.
Точно не стоит считать его «нишевой технологией». Rust всегда разрабатывался как язык общего назначения. Да, у него был флагманский проект (Mozilla Servo), который в итоге оказался заморожен. Он послужил только изначальным драйвером развития, но не был определяющим для функционала языка.
Никита Пузанков, разработчик
Rust с самого начала не позиционировался как нишевая технология, у Mozilla были свои цели, но проект был направлен на широкий спектр задач, которые можно будет решать с его помощью. Rust — это general purpose programming language, что означает отсутствие какой-то конкретной прикладной задачи и широкие возможности применения.
Первое время Rust использовал Speed, Safety and Concurrency как троицу фич языка, комбинация которых делает его уникальным. Сейчас упор в продвижении языка идёт на широкие возможности применения в самых различных сферах — от embedded до web 3.0, game development и написания компонентов операционных систем (а также написание самих операционных систем). Но наиболее значимое влияние язык оказал на распределённые web-системы.
Rust априори лучше большинства морально устаревших языков, поэтому он выживает C в системной инженерии, разработке операционных и встраиваемых систем, C++ — в High-Frequency Trading и Game Development, Java/Python/Ruby/ — в web-разработке и многих других сферах. Это нечестная конкуренция, просто язык можно назвать next generation — он основан на опыте «старичков» и поэтому на голову выше предыдущего поколения.
В блокчейне, да и в целом в Web 3.0, Rust оказался очень вовремя, поскольку ниша была свободна от конкурентов. Rust имел сильное влияние на эту экосистему, а экосистема в лице разработчиков влияла на Rust. После того как Mozilla начала уходить от проекта, именно компании и разработчики из сферы распределённых web-сервисов начали активно контрибьютить в язык и библиотеки.
Дмитрий Свиридкин, Rust/C++ Developer, @Nekrolm
Rust — изначально язык для системного программирования. И он пытается решить проблемы других подобных языков. Конкретнее — проблемы, пришедшие из языка C. C++ когда-то популяризировал через свои конструкторы и деструкторы механизм RAII для управления ресурсами, памятью и не только. Это было нужно, чтобы не забывать их освобождать и не делать этого дважды. Но при этом язык сохранил проблему: проверку валидности ресурса перед доступом к нему программист берёт всецело на себя, свои хорошие практики и внимательность. В результате из-за небезопасного доступа к памяти и use-after-free существовало и существует огромное количество уязвимостей в ПО.
В managed языках типа C#, Java, Python и многих других эта проблема решена введением контроля ссылок в рантайме — например, сборщиками мусора. В результате ресурс всегда жив, пока на него ссылаются. У сборщиков мусора есть свои ограничения, влияющие на производительность и, что более важно, на предсказуемость времени выполнения. Поэтому такой подход не везде допустим.
Rust как раз таки предлагает решение проблемы контроля доступа к ресурсам без введения сборщика мусора — через статический анализ кода и введение статически проверяемых ограничений — всё на этапе компиляции, без оверхеда для производительности.
При этом Rust может использоваться как C, но с синтаксическими удобствами. И быть таким же небезопасным как C — в Rust есть unsafe режим специально для этого. Везде, где можно использовать C, можно использовать Rust. В теории. На практике —- не все возможные платформы поддерживаются LLVM компилятором.
Rust сейчас активно применяют для написания бэкендов web-приложений, на него переписывают криптографические алгоритмы, для которых безопасность работы с памятью крайне важна. Энтузиасты переписывают классические консольные приложения и ещё много чего.
Алексей Гладких, разработчик, @gaxeliy
Изначально Rust — это язык, который решает все те же задачи, что и С, но с высокоуровневыми языковыми конструкциями и безопасной памятью. На данный момент он нашёл широкое применение там, где нужна высокая скорость и высокий контроль системных языков — блокчейн, алготрейдинг, потоковая обработка видео, облака.
Код на Rust есть уже не только в нишевых операционных системах, драйверах, web-серверах и браузерах. Rust — объективно лучший язык для WebAssembly, так как у него нет рантайма как у С и он безопасен по памяти как Java или даже Haskell. Единственное, для чего объективно не подходит Rust, причём не из-за отсутствия библиотек, а принципиально не годится, — это быстрое прототипирование.
Rust популярен в крипте по той же причине, почему популярен Go. Они почти одновременно появились. И Rust подходит для крипты. Крипта — это модно. Rust — тоже модно. Модные стартапы будут пилить крипту на Rust. То, что Rust позволяет писать код, который будет намного быстрее и надежнее, чем на других языках, тоже сыграло роль. Но я уверен, что совпадение периодов хайпа имело бОльший вклад.
Существует ли в Rust компромисс между производительностью и выразительностью
Rust позволяет красиво писать в функциональном стиле и помогать себе императивным кодом там, где это удобнее. Этим он похож на большинство мейнстримных языков. Это практичный язык, не доводящий свою идеологию до абсолюта.
Дмитрий Свиридкин, Rust/C++ Developer, @Nekrolm
На самом деле никакого компромисса нет. В Rust вам доступна вся unsafe мощь C, даже с ассемблерными вставками — можно руками низкоуровнево оптимизировать сколь угодно плохо или хорошо.
Компилятор Rust довольно сильно полагается на оптимизирующие способности LLVM, но и сам язык для них предоставляет дополнительные возможности за счёт введённых в safe-подмножестве ограничений:
- Передача владения через деструктивное перемещение позволяет переиспользовать память и автоматически убирать её лишнее выделение;
- Уникальность mut-ссылок благоприятствует кешированию;
- Инварианты некоторых типов позволяют экономить память на размерах структур.
И всё это автоматически, без необходимости вручную что-то низкоуровнево оптимизировать.
При равных затратах на очень высокоуровневое написание кода на C++ и на Rust, без ручных манипуляций по резервированию, переинтерпретированию буферов в обоих случаях, на Rust в среднем будет сгенерирован более оптимальный и производительный код.
Никита Пузанков, разработчик
Rust полагается на Computer Science и реализовывает как академические принципы, так и best practices прикладной разработки. Подойдя к задачам с умом и потратив время на прототипирование, команда смогла выпустить в мир сбалансированный продукт.
Константин Егупов, backend-разработчик
Если производительность замерить понятно как, то «выразительность» — это очень субъективный параметр. Я бы сказал так: Rust хорош, чтобы писать довольно сложный код, поддерживаемый большой командой, очевидным образом реализующий бизнес-логику и устойчивый к большим рефакторингам. В этом смысле он «выразителен»: вы пишете высокоуровневые конструкции, которые надёжно делают именно то, что нужно, а не делаете много мелких шажков, как приходится в Go. Однако эти конструкции могут быть довольно многословны.
Чтобы быстро создать прототип, этот инструмент не очень подходит, лучше использовать Python, в котором вам не придётся думать об управлении памятью и долгой компиляции. Для продвинутых инженеров ещё есть функциональные языки программирования, типа OCaml и Haskell. Они «выразительны» и похожи на Rust: тоже помогают программисту писать верный код; скомпилировалось — значит, скорее всего, работает правильно. Но в этих языках тяжелее использовать классические императивные подходы из других языков, которые могут быть более понятны для программиста и более производительны.
Rust как первый язык — почему нет?
Не требует ручного управления памятью и знания сложных CS концептов. Но более популярные языки новичку учить будет проще — больше учебных материалов, курсов и книг доступно в сети.
Никита Пузанков, разработчик
Rust отлично подходит как первый язык программирования, поскольку не обязывает пользователей вручную управлять памятью, имеет отличный toolset: cargo, crates.io, встроенный фреймворк для тестирования. Также есть отличные официальные материалы для изучения.
Rust не несёт в себе сложных концептов из мира CS, поэтому язык нельзя назвать трудным для освоения или использования. Отличный компилятор и сообщения об ошибках нивелируют трудности, которые могут возникнуть при освоении таких разделов как владение и заимствование.
Константин Егупов, backend-разработчик
Как первый язык программирования Rust вряд ли оптимален, просто потому что для Python/Javascript/Go больше примеров и учебных материалов, да и начать на них проще. У новичка он будет как минимум вызывать отторжение из-за сложности, как Java на фоне скриптовых языков. Но для опытного инженера расклад меняется: когда вы начнёте детально разбираться во всех нюансах тех же Javascript и Java, чтобы избегать мелких ошибок, которые портят вам жизнь, они окажутся в итоге не сильно проще Rust.
Алексей Гладких, разработчик, @gaxeliy
Rust берёт лучшее от высокоуровневых и низкоуровневых языков. Но у всего есть цена. Rust принёс в жертву простоту изучения и поэтому у него очень крутая кривая входа. Язык содержит концепции, которые до этого не встречались в языках, применяющихся на практике — заимствование, аффинные типы и тому подобное. Поэтому как первый язык Rust однозначно не подходит и как второй тоже. Нужно быть уже состоявшимся программистом, чтобы его изучать.
Валентин, Junior Rust Developer, Финляндия
Для меня Rust — не первый язык программирования, но всё равно он оказался достаточно удобным, чтобы разобраться с ним в школьном возрасте. Кроме того, я проводил эксперимент и по сути втянул в Rust несколько человек. Для новичков не настолько важна технология, насколько важна мотивация. Если человек хочет учиться, ничего не мешает ему читать документацию и учиться программированию через Rust. Чем больше парадигм программирования ты знаешь, тем больше у тебя есть методов решения проблем.
Что общего у C++ и Rust
Оба языка — сложные, но в C++ сложность растёт более монотонно, при этом Rust всё-таки проще плюсов.
Дмитрий Свиридкин, Rust/C++ Developer, @Nekrolm
C++ и Rust разные, хоть и похожи. При серьёзном программировании на C++ вы будете проходить проверку внимательности и памяти, а на Rust — проверку логики и знаний. Уровень сложности при этом будет одинаковый.
Но если рассматривать кривую сложности, то на C++ она вся, по моему ощущению, более пологая. В то время как на Rust она сначала почти незаметна, но растет резко, рывками.
Никита Пузанков, разработчик
Думаю, Rust проще плюсов, особенно учитывая сколько в C++ имеется различных фишек, которые были добавлены ad-hoc и не совсем хорошо интегрированы. Хотя то же можно сказать про асинхронное программирование на Rust, его внедрили значительно позже и оно несколько отличается от синхронного программирования.
Алексей Гладких, разработчик, @gaxeliy
Сложнее ли Rust, чем C++ — вопрос открытый. На C++ можно писать плохие программы, не доучив его, и, постепенно набираясь мастерства, продолжать писать плохие программы, но уже более идиоматичные. В Rust уже в достаточно простых программах придётся воевать с компилятором. Он не даст скомпилировать программу, правильность которой не сможет доказать. Rust в этом плане — лютый параноик.
Вообще Rust и C++ трудно связывать. Вроде у обоих языков нет рантайма, но у одного это означает «шаг влево — расстрел», а у другого неправильная программа даже не скомпилируется. Большая часть скепсиса в отношении Rust со стороны С-разработчиков и C++-разработчиков связана с тем, что в Rust сложнее придумать «хакерское» решение, где ты как-то хитро скопировал байты из одного места памяти в другое и всё каким-то чудом работает, через неделю сам не можешь понять, как этого добился. В Rust любое решение нужно высечь в граните, а для этого придётся научиться работать долотом.
Константин Егупов, backend-разработчик
Я не крестовик, поэтому не могу подробно сравнить синтаксис. Даже если и мог бы, это довольно большая тема. Одна вещь, которая сразу бросится в глаза: код на C++ компилируется отдельно, файл за файлом, в то время как Rust компилирует весь проект (crate) целиком, да и ещё сразу собирает для него все зависимые библиотеки.
В Rust вам придётся понять, как работать с системой владения ссылками (включая Box, Rc, RefCell и прочие прелести), но компилятор вам будет в этом помогать, в то время как в C++ вам надо разбираться с rvalue, glvalue, undefined behaviours и прочей головной болью — и во всём этом вы можете напортачить, если не будете очень-очень внимательны.
Для Rust есть стандартная система сборки (cargo), которая умеет управлять зависимостями, запускать тесты. В мире C++ с этим всё не очень хорошо. Rust вообще гораздо более современный по тулингу язык.
Наконец, Rust в своей стандартной библиотеке широко использует много техник из функционального программирования, например, работу с коллекциями через итераторы. Люди из мира Javascript, Java 8+ и C# будут к этому привычны, а вот людям из Go и C++ придётся несколько менять привычки.
Недостатки Rust
Медленная компиляция, консервативность, плохая интеграция асинхронного программирования, сложность концепции владения.
Дмитрий Свиридкин, Rust/C++ Developer, @Nekrolm
Borrow checker — это и фича, и недостаток одновременно. Язык очень консервативен и в текущей реализации не пропускает некоторый полезный код по совершенно странным причинам, объясняемым только особенностью реализации. Но это когда-нибудь исправят. Не все нужные API стабилизированы, это тоже когда-нибудь исправят. В async-подмножестве сейчас много страданий при попытках минимизировать оверхеды по памяти — некоторые вещи невыразимы, но это тоже когда-нибудь исправят.
Константин Егупов, backend-разработчик
Недостатка два:
- Медленная компиляция. Её можно улучшить административными методами, но до определённых пределов.
- Концепция владения ссылками уникальна, поэтому её относительно сложно изучать. Она сложно взаимодействует с другими частями языка — лямбдами и асинхронным программированием, поэтому многие паттерны, которые были бы естественными в других языках, в Rust использовать не получится. Но, чтобы это понять заранее, надо хорошо разбираться в языке. Что вы получаете взамен: эффективное управление памятью и отсутствие сборщика мусора. Ваш код работает быстро и его можно хорошо интегрировать с низкоуровневым кодом на C.
Валентин, Junior Rust Developer, Финляндия
Существенных недостатков нет, если не брать в расчёт какие-то крайние случаи. Это просто другие решения в плане дизайна языка. Недостатки компенсирует удовольствие от разработки на нём. Rust сделан «для людей». Developer experience на высоте из-за титанической работы разработчиков компилятора и экосистемы.
Как учить Rust
Понятные ошибки в компиляторе помогут новичкам фиксить код, а Rust Book и задачки — разобраться с теорией.
Дмитрий Свиридкин, Rust/C++ Developer, @Nekrolm
Если вы уже знаете какой-то язык — можно сразу пробовать Rust. Комьюнити разработчиков приложило и прикладывает огромные усилия, чтобы делать ошибки и сообщения компилятора информативными. В последних версиях можно начать писать функции, как на вашем уже знакомом языке программирования, а компилятор Rust вместо безликих unexpected token расскажет, как принято писать — подскажет ключевые слова, скобки и покажет примеры.
Для желающих окунуться в теорию существует Rust Book. А примеры с маленькими задачками можно найти в Rustlings. Rust by Examples на GitHub. Они, конечно, не всё покрывают и иногда отстают от последних нововведений, но обновляются комьюнити, так что остаются вполне актуальными.
На разные более глубокие темы тоже есть книжки — на async и unsafe. Так что материалов вполне достаточно. Также есть книжки про разработку на Rust, например, Zero to Production in Rust. В них уже больше не про сам язык, а про экосистему вокруг: какие есть фреймворки, как настроить проект и тестирование.
Константин Егупов, backend-разработчик
У меня свободный английский, поэтому я просто читал официальную документацию. Но я опытный инженер со знанием разных языков программирования, и мне было легко понять многие концепции и то, чем обусловлены их ограничения. Ошибки компилятора дают очень полезные подсказки. Ну и читайте ответы на Stack Overflow!
Полезные библиотеки Rust
Библиотек для Rust много, и они, как правило, высокого качества. Есть библиотеки практически под любые виды задач.
Константин Егупов, backend-разработчик
Интереснее всего библиотеки для обхода различных ограничений языка. Например, lazy_static для сложно определяемых констант, ordered-float для сортировки вещественных чисел с игнором NaN, anyhow и thiserror для эргономичной обработки ошибок. Крайне полезна библиотека сериализации serde — особенно с учётом того, что в Rust нет рефлексии, и заменить её на практике проще всего при помощи сериализации. Для удобной работы с датами обычно берут chrono. Для параллельной работы хорош rayon, а для асинхронной — tokio.
Для web-бэкендов есть множество фреймворков, например iron и actix-web; для работы с БД — diesel и sqlx, для шаблонизации — askama и tera. Для фронтенд-разработки через WebAssembly есть yew (аналог React) и sycamore (аналог Svelte).
Алексей Гладких, разработчик, @gaxeliy
Молодость языка всё ещё сказывается и создает проблемы, но уже не во всех сферах. Скажем так, ААА-игры на Rust пока писать рано. А вот web-сервисы любой сложности — без проблем. Все библиотеки для этого есть. Инфраструктура молодая и вобравшая в себя все современные веяния. Нет необходимости поддерживать ошибки дизайна языка и экосистемы, которые были допущены на заре времён.
Среди библиотек я советую обратить внимание на actix, serde, diesel, iced. Много хороших библиотек, которые приятно учить просто для интереса. Мой личный фаворит — tui-rs для интерфейсов и pyo3 для расширений Python.
Легко ли найти работу со знанием Rust
Работа есть, но не в изобилии, зарплаты высокие, но за рубежом выше, чем в России.
Никита Пузанков, разработчик
Rust, на мой взгляд, сейчас в стадии late majority. Число программистов в ближайшие пару лет вряд ли сильно вырастет, но постепенно будет продолжать пополняться. Язык 7 лет подряд становился самым любимым в опросе от Stack Overflow.
Работу сейчас найти достаточно просто, если у вас есть базовые знания языка и опыт на другом стеке. Хотя вакансии для Junior и Assistant уровней тоже имеются. Зарплаты в РФ намного ниже мирового рынка — примерно 200 000 в месяц. Зарплаты вне РФ — от 8000 USD и выше, в зависимости от направления и компании.
Константин Егупов, backend-разработчик
Найти работу довольно сложно, большинство проектов до сих пор построены вокруг крипты. Растёт популярность WebAssembly-проектов. Зарплаты обычно немаленькие. Rust-специалисты обычно владеют ещё несколькими языками и знают себе цену.
Валентин, Junior Rust Developer, Финляндия
Все мои знакомые растовики нашли работу. Мой опыт показывает, что можно быть востребованным джуном даже за рубежом. Я прошёл все этапы собеседования с консалтинговой компанией и запросил минимально необходимую для получения визы зарплату. Это позволило мне быстро релоцироваться в Европу со знанием Rust, хоть и без высшего образования.
Отношения в сообществе
Когда мы обратились в русскоязычное комьюнити Rust за ответами, получили негативные реакции, отказ отвечать на вопросы и даже грубость. Но нам удалось найти отдельных представителей этого языкового сообщества, которые были отзывчивы и согласились рассказать о том, как всё устроено.
Никита Пузанков, разработчик
Международное сообщество очень открыто, толерантно и инклюзивно, хотя тоже не без эксцессов. К сожалению, с ростом популярности некоторая часть «токсичных» людей пришла и сюда. Особенно это видно в так называемом «русскоязычном сообществе Rust».
В международном сообществе или локальном сообществе других стран можно рассчитывать на помощь. В русскоязычное сообщество я бы с вопросами не совался.
В развитие языка контрибьютят Amazon, Microsoft, множество крипто-бизнесов, а также отдельные энтузиасты.
Константин Егупов, backend-разработчик
Англоязычное сообщество Rust очень доброе. С самого начала была создана нетоксичная культура, основанная на понимании и взаимопомощи и избегающая лишнего снобизма. На том же Stack Overflow отличное качество ответов.
Алексей Гладких, разработчик, @gaxeliy
Сообщество, по моим ощущениям, одно из самых открытых и дружелюбных. Тем удивительнее было узнать от тебя, что вам там были не рады :3
Как развивается язык
Каждые 6 недель у Rust стабильно выходят релизы — в основном это шлифовка старых функций, улучшения языка. Судя по всему, какие-то серьёзные изменения в синтаксис в ближайшее время вноситься не будут.
Никита Пузанков, разработчик
Изначальный лозунг языка был Stability without stagnation. Это в основном получается поддерживать для небольших фич и улучшений языка, однако async, GAT и некоторые другие крупные изменения приходят в язык «не без греха». Думаю, что в ближайшие 10 лет мы либо увидим Rust 2.0 на новой базе, либо получим следующий next generation язык взамен Rust, а он станет тем, чем сейчас являются Java или C++.
У Rust есть большая система управления, разбитая как на фиксированные команды (компилятор, документация и пр.), так и на рабочие группы, которые собираются под конкретные задачи. В GitHub работает система RFC и каждый может выставить вопрос на обсуждение или проголосовать.
Алексей Гладких, разработчик, @gaxeliy
Язык развивается в последние годы, преимущественно отшлифовывая имеющиеся возможности. С тех пор как появились константные дженерики, серьёзных изменений синтаксиса я не видел. Преимущественно шлифуется стандартная библиотека. Синтаксис стабилизировался, а значит, теоретически не должно быть ломающих совместимость изменений.
Валентин, Junior Rust Developer, Финляндия
На развитие Rust как языка ты можешь повлиять двумя основными способами. Либо фиксить баги, либо создавать RFC, то есть определенный формат обсуждений нововведений, изменений языка. Туда ты можешь законтрибьютить свою идею, как хочешь развить язык, добавить новую фичу.
Важно создавать как можно больше проектов на Rust и уговаривать своих работодателей, чтобы они давали вам писать проекты на нём. Я видел много кейсов на Reddit, когда люди уговаривали руководство написать на Rust какой-нибудь микросервис. Список аргументов, которые стоит привести при этом, легко гуглится. Энтузиасты составляют целые гайды.
Почему Rust не так популярен, как Go
Go создала Google — корпорация с огромными бюджетами и известностью, тем не менее, популярность Rust не особо уступает Go.
Никита Пузанков, разработчик
Популярность Go по отношению к Rust не особо велика.
Это примерно 2 процента, согласно данным опроса stackoverflow 2022. Учитывая, что Go является детищем Google и имел несопоставимый бюджет на маркетинг, а также лёг в основу Kubernetes и сейчас очень распространён среди DevOps и системных администраторов, на мой взгляд, они имеют паритет в популярности.
Язык Go очень плохой: в нём была хороша технология сбора мусора, но одна эта киллер фича не дала достаточных возможностей для завоевания широкого признания.
Константин Егупов, backend-разработчик
Go вышел раньше, он проще в изучении, его продвигает крупный корпоративный спонсор Google, у него очень хорошая стандартная библиотека, свой собственный, быстро работающий и сильно оптимизированный компилятор, который в некоторых случаях работает с памятью даже более эффективно, чем Rust.
В то же время обычно Go всё-таки немного уступает Расту по производительности и серьёзно уступает по «надёжности», то есть по способности помочь программисту избегать логических ошибок и писать очевидно корректный код.
У них есть несколько похожих принципов — например, подход к ООП и обработке ошибок. Изучение Go помогает в дальнейшем перейти на Rust.
Алексей Гладких, разработчик, @gaxeliy
Go популярнее Rust по маркетинговым причинам. Google успешно продали идею, что сносные сервисы через две недели смогут писать даже разработчики на Excel. Я думаю, многие компании только сейчас начинают понимать масштабы своей ошибки. Ну и не удивительно, что Go популярнее. Rust сложнее. В Go Google вбахивал бюджеты, раздувал его. Были пиар-компании типа: «Учите Go! Это как Python, только быстрый!» Менеджеры велись первыми. Следом велись некоторые программисты.
Валентин, Junior Rust Developer, Финляндия
Go — это язык, который ориентирован чисто на продакшн и не доставляет удовольствия в процессе программирования. Он сухой, пресный, как галета. Просто работает. По большей части они одинаковы по популярности, но в последнее время Rust даже обгоняет Go. Rust перестал быть нишевым языком.
Поддержка и тулинг
Большинство инструментов в Rust — сразу из коробки. Это стандартизированные документация, пакетный менеджер, сборщик.
Константин Егупов, backend-разработчик
Консольный тулинг отличный, в IntelliJ/VS Code есть хорошая подсветка кода и некоторые средства автодополнения и рефакторинга. Сложности лишь с макросами: для успешного анализа кода их надо развернуть. Большинство IDE с этим справляются, хотя бывают и трудности.
Алексей Гладких, разработчик, @gaxeliy
У Rust отличные стандартные утилиты. Пакетный менеджер Cargo — пример для подражания. В комплекте с языком есть инструменты тестирования и т.д. Поддержка в IDE в наше время — не очень актуальный вопрос. С появлением LSP (Language Server Protocol) почти любой текстовый редактор можно настроить для работы почти с любым языком. Rust — не исключение. Я работал с ним из VSCode, NeoVim и даже PyCharm. Везде работала отладка, подсветка синтаксиса, автодополнение, go to definition. А что ещё нужно?
Валентин, Junior Rust Developer, Финляндия
Я считаю, что никто до сих пор не смог превзойти Rust в плане тулинга языка. Нельзя не отметить сообщения об ошибках – они максимально человечные и щадящие.
Будущее языка
Эксперты считают, что популярность языка будет расти, но не очень быстро. Его уже применяют в разработке облачных технологий и Android, а доля использования языка в Linux-ядре будет расти.
Никита Пузанков, разработчик
Я считаю, что Rust будет долгое время наращивать позиции в разных сферах медленными темпами. Однако, если не получится преодолеть накопленный ворох проблем, то stagnation начнёт медленно убивать язык. Пока нет сильных конкурентов и Rust является лучшим выбором для широкого спектра задач, я не верю, что какой-то выродок от Google изменит ситуацию. Однако Idris и другие концептуально прогрессивные языки обязательно выстрелят и рано или поздно сделают новый next gen.
Константин Егупов, backend-разработчик
Профессионалы любят его, но внедрение идёт довольно медленно из-за отсутствия большого корпоративного спонсора, а также по причине консервативности любителей C++, Java и C#, которые считают что у них «и так всё хорошо». Я думаю, его доля будет медленно, но верно расти. Недавно произошло знаковое событие — Rust вошёл в Top-20 TIOBE Index. В крупных айтишных компаниях вроде Amazon и Facebook он уже используется для некоторых инфраструктурных инструментов.
В 2004 году Пол Грэм написал, что бизнесам полезно искать разработчиков на тогда ещё малоизвестном Python: если ты нашёл человека, который оценил достоинства нового языка и самостоятельно его выучил, это, скорее всего, хороший инженер и энтузиаст. Вот и сейчас: использовать Rust на проекте — значит привлекать крутых инженеров.
Алексей Гладких, разработчик, @gaxeliy
Я считаю, что в 2022 году есть только две причины выбрать C или C++ вместо Rust: наличие специалистов, знающих плюсы, либо наличие библиотек для вашей специфической отрасли, где пока ещё нет библиотек на Rust.
Будущее у языка огромное. Amazon применяют его в разработке своих облачных технологий, Google начали использовать его в Android. Fuchsia частично написана на Rust, Microsoft и Facebook тоже приглядываются к этому языку программирования. CSS-движок Firefox — на Rust, часть клиента Discord — на Rust, перешли на него с Go, между прочим. Будет расти доля Rust в ядре Linux.
Я считаю, что у Rust большой потенциал подвинуть C# и Java, так как его высокоуровневые конструкции им не уступают и даже превосходят, а также имеют нулевую стоимость, что вообще удивительно. WebAssembly — перспективная отрасль, для которой можно продавать Rust как почти безоговорочно лучшее решение.
Валентин, Junior Rust Developer, Финляндия
Будет больше и больше новых проектов на Rust, и работу найти станет не так сложно. В него вкладывают много усилий. Около года назад появилась поддержка Rust для Android. Возможно, в будущем мы увидим его как язык для написания различных секьюрных вещей под Android. В 6 версии ядра Linux Rust стал вторым языком после C. Это немаловажное событие, которое означает, что Rust очень быстро развивается.