Если вы пишете свой язык программирования, то вы наверное слышали о type inference. В этом цикле статей, без лишней теории, мы наглядно разберем как это работает и реализуем свой на Rust. В предыдущей моей статье “Как легко перейти с Java на Rust” я делился с вами советами по переходу на Rust и уменьшению количества “потерянной крови” на этом пути. Но что делать дальше, когда вы уже перешли на Rust, и ваш rust язык программирования для чего код хотя бы компилируется и работает? Сегодня я хочу поделиться с вами некоторыми идеями о том, как писать идиоматический код на Rust, особенно если вы привыкли к другим языкам программирования. Я недавно изучал примеры использования нейронных сетей из библиотеки Candle от Hugging Face и обратил внимание, что они довольно сложны для понимания людей, которые только начинают знакомство с нейросетями.
Разработкой языка занялся в свободное время сотрудник Mozilla Грэйдон Хор 14 лет назад, в 2006. Три года он действовал самостоятельно, пока в 2009-м к работе официально не подключилась Mozilla. Такой синтаксис называют си-подобным — потому что его корни восходят к языку С, который появился ещё в далёких семидесятых. Сейчас это фактически стандарт корпоративной разработки — если знаете такой синтаксис, сможете быстро пересесть на Java, Swift, C# и любой другой современный язык. Для дополнительной информации смотрите
документацию по rustup.
Его потом можно поместить в более высокоуровневые абстракции, где все виды их использования опасности уже не представляют. Это касается использования инструментов командной строки, веб-сервисов, встраиваемых компонентов, инструментария DevOps, биоинформатики, криптовалюты. Тут же подразумевается работа с аудио и видео файлами (анализ и тарнскодирование), с поисковиками, приложениями. Плюс ещё затрагивается машинное обучение и основные части браузера Firefox. Почему язык Rust идеален в применении для низкоуровневого системного программирования?
Еще один замечательный пример использования Rust в веб-разработке – проект Yew. Это современный фреймворк для создания многофункциональных и быстрых веб-приложений с использованием WebAssembly. Yew предоставляет компонентный подход к разработке, аналогичный тому, что используется в React и Vue.js, но с преимуществами Rust, такими как высокая производительность и безопасность. Yew позволяет разработчикам создавать интерактивные пользовательские интерфейсы с быстрым откликом, оптимизированные для современных браузеров.
Например, некоторые компоненты операционной системы Windows написаны на Rust. Есть и более специфические проекты — ОС для устройств «умного дома» Tock и Unix-подобная система Redox. В Rust объектная система основана на типажах (traits) и структурах (structs). Типажи определяют сигнатуры методов, которые должны быть реализованы для каждого типа (чаще всего — структуры), реализующего типаж.
Он позволяет привести код к единому стилю, обеспечивая его чистоту, согласованность и читабельность. Rustfmt настраивается на основе стандартных рекомендаций или пользовательских правил, что позволяет разработчикам легко поддерживать единый стиль кода в своих проектах. Использование rustfmt упрощает процесс проверки кода, совместной работы и внесения изменений, снижая вероятность ошибок и проблем сопровождения. Разработка игр на Rust становится возможной благодаря экосистеме инструментов и библиотек, предоставляемых сообществом.
У него лаконичный синтаксис, и на нем можно писать в разных стилях. Современные операционные системы и ядра операционных систем в основном написаны на С и С++, однако Rust понемногу «шатает» их позиции в этой области. Уже сегодня его называют языком программирования «завтрашних операционных систем», поэтому его актуально изучать сейчас, чтобы овладеть языком, который пришел на долгие-долгие годы. Язык позволяет объявлять функции и блоки кода как «небезопасные» (unsafe). В области такого небезопасного кода не применяются некоторые ограничения, таким образом можно выполнять операции на более низком уровне, но разработчик должен полностью понимать, что он делает.
Основным способом установки Rust, который используют люди, является Rustup – инструмент для установки и управления версиями Rust. Полагаю, что качество Rust-кода и удобство его доработки будет напрямую зависеть от того, насколько удачно программист решил проблему инкапсуляции низких уровней относительно высоких в рамках своей задачи. На низком уровне заимствование означает получение ссылки на объект, время жизни которой компилятор проверит на соответствие времени жизни исходного объекта. Но при взгляде с более высокого уровня, заимствование означает получение некоего представления (view), временно соотнесенного с исходным объектом. Реализация подобного сценария желательна не так уж и редко, а в некоторых случаях она крайне необходима.
Если вы посмотрите на некоторые метрики, которыми поделился Figma, у них были невероятные улучшения в производительности после перехода на Rust. Язык Rust надеется поддержать и многих других пользователей; перечисленные здесь – лишь самые значимые заинтересованные лица. В целом, главная цель Rust – избавиться от компромиссов, на которые программисты шли десятилетиями, обеспечив безопасность и производительность, скорость и эргономичность.
Например, создадим структуру struct Car, которая включает в себя переменную строкового типа brand и переменную целочисленного типа year. Аналогом этих структур в таких языках, как Java и Python, являются классы. Она обозначает конец одной инструкции, как точка в предложении. Инструкции — это указания компьютеру выполнить конкретное действие.
Примером может служить проект Tock, операционная система в реальном времени для встроенных систем, написанная на Rust. В этом случае разработчики могут использовать сторонние инструменты, такие как cxx или rust-cpp, для облегчения взаимодействия между Rust и C++ кодом. Эти инструменты позволяют генерировать оболочки или мосты для работы с классами и объектами C++, что облегчает интеграцию. Это — алгебраический тип данных (АТД), простой и выразительный инструмент для конструирования высокоуровневых абстракций. Rust — это язык программирования общего назначения, заточенный под разработку высоконагруженных систем. На нём пишут веб-приложения, браузерные движки, блокчейны и другие сложные платформы, которые обрабатывают запросы миллионов пользователей.
Браузер Firefox тогда переживал обновление движка, а Rust помог реализовать некоторые важные штуки — например, загрузку сайтов в режиме многопоточности. Соответственно, разработчики на Rust обычно включают её в
переменную окружения
PATH. Microsoft выбрала Rust для приложений, критичных к безопасности и производительности. Rust также широко используется в Azure, особенно в его платформе IoT Edge, для запуска приложений AI на устройствах IoT. Разрешение компилятору определять тип данных – одна из основных причин, по которой вы сталкиваетесь с проблемами производительности при масштабировании приложения. Rust изначально создавался для обеспечения высокой производительности.