Базы данных все пока что упираются в Diesel. Может есть что-то еще, но оно слишком сырое, чтобы его серьезно воспринимать. Микроконтроллеры сейчас держатся на xargo, подвижек много разных, где-то были даже заметки о чем-то коммерческом (сейчас не найду). Вот тут более развернутый ответ с тулзами и либами.
- многопоточность - проблем нет совсем, все проверки встроены в язык
- взаимодействовать с api операционной системы - базовые вещи встроены в стандартную библиотеку, специальности часто реализованы сторонними либами, разной степени поддерживаемости. в конце концов можно написать либу-враппер сишной либы и с ней жить (но это в случае отчаяния)
- быть достаточно производительным для анализа данных поступающих из сети, на алгоритмах требующих затрат - обычно производительность из коробки на уровне написанных в лоб решений на других языках. понемногу появляется поддержка ассемблерных расширений и SSE, которыми тожно можно что-нибудь специфическое ускорить. Если знать язык уровнем выше среднего, можно заморочиться и написать вылизанное и очень производительное решение.
Например, если у вас еще "рука не набита", то привычно простые задачи вроде прототипирования на коленке выльются вместо пары вечером с пивом в неделю осадной войны с компилятором (точнее, с его модулем, который отвечает за проверку владения и времена жизни переменных - borrow checker), поскольку компилятор вас сразу ультимативно заставляет писать код без гонок данных, беспорядочного доступа к переменным, нуллпоинтеров и неинициализированной памяти. С другой стороны, если научиться работать с этими правилами, пототипирование будет занимать ненамного больше времени, чем тот же Python, к примеру, но зато на выходе вы получаете практически готовое к продакшену приложение.
Второй пример - это неприменимость существующих Design Patterns к Rust. Здесь уже сложнее, так как паттерны создавались в том числе и для противодействия тем ошибкам, которых в коде на Rust в принципе нет как класса. Но многолетние привычки остались, и их ломать - занимает усилия и время. Побочным эффектом является так называемая "растозависимость" - ожидание тех же ограничений и правил компилятора от других языков, после Rust (например, вседозволенность работы с переменными, переданными по указателю).
Не работал с С++ на коммерческом уровне, но мне кажется, что сложность оного по сравнению с Rust лежит в самодисциплине и опыте - нужно знать заранее, что можно делать в коде, а что нельзя, потому что все вроде позволено, но везде есть конкретный способ безопасной реализации, который надо знать заранее, иначе будут убиты недели в обнимку с отладчиком. С Rust это несколько дней в построении правильной иерархии типов (кстати, знание Haskell очень приветствуется) и еще пару часов войны с borrow checker. Некоторые типы, особенно в случае запретом искользования памяти на куче, замыканий, и асинхронного использования, могут быть очень нетривиальны.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.