Rust: зачем он нужен, где применяется и за что его все любят
Рассказываем о быстром и надёжном языке программирования от Mozilla, который назвали совсем не в честь компьютерной игры.
Фото: NBC / Getty Images
Rust появился семь лет назад и почти сразу стал любимчиком программистов по версии Stack Overflow. Его используют Microsoft, Twitter, VK, Dropbox и другие гиганты IT-индустрии. Разбираемся, чем так хорош этот язык, что у него под капотом и подходит ли он новичкам.
Что такое Rust
Rust — это язык программирования общего назначения, заточенный под разработку высоконагруженных систем. На нём пишут веб-приложения, браузерные движки, блокчейны и другие сложные платформы, которые обрабатывают запросы миллионов пользователей. Разберём его главные фишки.
Компиляция. Перед запуском код на Rust сразу переводится на машинный язык — то есть превращается в набор нулей и единиц. Этим Rust отличается, например, от JavaScript, где код сначала прогоняется через интерпретатор, а уже потом идёт на процессор. Фишка компиляции в том, что так программы запускаются быстрее и потребляют меньше памяти.
Мультипарадигмальность. Парадигма программирования определяет стиль, в котором разработчики пишут код. Rust поддерживает сразу несколько парадигм: функциональное, декларативное и объектно-ориентированное программирование. Чаще всего компании используют последний подход, но Rust может работать в любом режиме.
Высокий уровень абстракции. Команды на Rust представляют собой простые английские слова: input, let, match и так далее. Поэтому код на нём легко читать и проверять. В то же время язык поддерживает использование некоторых низкоуровневых средств для более тонкой работы с железом.
Главная фишка Rust — сочетание скорости и надёжности. С одной стороны, язык даёт программисту полный доступ к памяти, а с другой — страхует его от ошибок и «выстрелов в ногу». Поэтому на Rust пишут софт, для которого важна стабильная работа в тяжёлых условиях: многопоточные системы, ПО для сложных вычислений и так далее.
История создания
В начале нулевых было два подхода к созданию компьютерных языков: в одном делали упор на скорость, а в другом — на безопасность. Например, программы на C++ работали быстро, но могли дать сбой из-за случайной ошибки программиста. А Java, напротив, снижал риски для разработчика, но из-за этого программы теряли в темпе.
Замысел создателей Rust был в том, чтобы соединить мощь C++ со стабильностью Java и выжать максимум из обоих подходов:
«Наша целевая аудитория — это разочарованные разработчики C++. То есть мы сами. Если вы тоже вынуждены работать с C++ из-за его производительности, но ищете что-то более безопасное и менее „болезненное“ — мы надеемся, что сможем это предоставить».
Грэйдон Хор,
автор языка программирования Rust
Изначально язык развивался как авторский проект программиста Mozilla Грэйдона Хора, а потом полностью перешёл под управление компании. Браузер Firefox тогда переживал обновление движка, а Rust помог реализовать некоторые важные штуки — например, загрузку сайтов в режиме многопоточности.
Кстати, своё название язык получил в честь грибов порядка Ржавчинные (англ. Rust Fungi). Эти грибы обладают особой живучестью — по мнению автора, такими должны были стать и программы на Rust.
Примеры кода и синтаксис
Так как основой для Rust послужил C++, внешне они очень похожи. Посмотрите, как выглядит одна и та же функция, написанная на этих языках:
Такой синтаксис называют си-подобным — потому что его корни восходят к языку С, который появился ещё в далёких семидесятых. Сейчас это фактически стандарт корпоративной разработки — если знаете такой синтаксис, сможете быстро пересесть на Java, Swift, C# и любой другой современный язык.
Вот, например, как выглядит простая программа на Rust для вывода текста на экран:
Разберём, что здесь написано:
- fn main() — обязательная функция в любой программе на Rust, её ещё называют точкой входа. Внутри main() прописывают всё, что нужно программе для запуска.
- println!(" ") — команда, которая выводит текст на экран. В нашем случае это «Привет, мир!».
- {} — фигурные скобки, которые обозначают границы тела функции.
Ещё одна фишка Rust — компактность кода. Создатели языка программирования с самого начала делали ставку на скорость разработки, поэтому все важные команды можно записать максимально коротко. Например, чтобы объявить функцию в JavaScript, надо каждый раз прописывать слово function — а в Rust достаточно короткого fn. Мелочь, а приятно :)
В чём сила Rust
Короткий ответ — в безопасном и экономичном управлении памятью. Когда вы пишете код на С++, вам нужно работать с ней вручную: расставлять указатели, чистить программу от мусора, следить за утечками. Если программа упадёт из-за какой-то ошибки или уязвимости, вы несёте за это полную ответственность.
У Rust совершенно другой подход — вся работа с памятью происходит под капотом языка по строго определённым правилам:
- У любого значения (например, числа) есть переменная-владелец.
- В каждый момент времени у значения может быть только один владелец.
- Если переместить владельца в другую часть кода, значение обнуляется.
Если нарушить одно из этих правил, компилятор выдаст ошибку и откажется собирать программу. Если в коде появится проблема, вы узнаете об этом сразу и сможете на лету её исправить. Наконец, если программа на Rust прошла сборку и запустилась, она будет работать стабильно даже в стрессовых условиях.
Читайте также:
С другой стороны, можно отключить безопасный режим с помощью блока unsafe и управлять памятью полностью вручную. Это нужно, например, чтобы писать низкоуровневый код для аппаратных средств: умных часов, видеокамер, микроконтроллеров и других устройств.
Для чего используют Rust
Так как Rust умеет выжимать максимум из железа, на нём часто пишут высоконагруженные части приложений и сервисов. Например, вот что разрабатывают с его помощью крупные международные и российские IT-компании:
- Mozilla — движок Quantum, на котором работает браузер Mozilla Firefox;
- Coursera — компоненты платформы онлайн-обучения;
- Microsoft — низкоуровневые элементы ОС Windows;
- Rambler — серверную логику веб-приложений;
- «ВКонтакте» — инструменты сборки и управления исходным кодом.
Теперь пройдёмся по сферам, где этот язык программирования широко применяется.
Криптовалюты и блокчейн. Чтобы блокчейны могли совершать защищённые транзакции между миллионами разных устройств, нужен быстрый и стабильно работающий код — а программирование на Rust как раз это позволяет. Например, на нём работает один из самых популярных клиентов для платформы Ethereum — Parity.
Операционные системы. В теории на Rust можно с нуля написать полноценную операционку с драйверами, файловым менеджером, браузером и другой начинкой. На практике конкурировать с Apple и Microsoft мало кто хочет, поэтому успешных проектов пока не так много. Можно вспомнить разве что ОС для умных устройств Tock и защищённую операционную систему Redox.
Сайты и веб-приложения. Благодаря тому, что Rust устойчив к нагрузкам, его можно использовать для разработки серверной логики сайтов. Например, облачный сервис Dropbox переписал на нём свою систему хранения файлов — а это десятки тысяч серверных машин, куда постоянно загружают гигабайты новых данных.
Браузерные движки. Не зря же Rust придумали в Mozilla — язык изначально заточен именно под браузерную разработку. В нём есть фишки для быстрой отрисовки веб-страниц в режиме многопоточности — можно разбить загрузку сайта на несколько задач и распределить их между ядрами процессора.
Машинное обучение. Rust поддерживает множество библиотек для работы с большими данными: тренировку алгоритмов, визуализацию данных, линейную алгебру, работу с векторами, обработку изображений — всё что угодно. Если в будущем вы видите себя в Data Science — присмотритесь к Rust.
Плюсы и минусы Rust
Вот за что язык ценят компании и разработчики:
- Скорость и безопасность. Как мы писали выше, программы на Rust работают быстро и ломаются только в безвыходных ситуациях.
- Статическая типизация. В Rust проверка типов переменных происходит ещё на этапе компиляции — это плюс к надёжности языка.
- Совместимость с C++. В программах на Rust можно без проблем вызывать блоки кода из С и C++ — и наоборот.
- Заботливый компилятор. Если в программе случится ошибка, компилятор расскажет, что пошло не так, и даст советы, как всё починить.
- Кросс-платформенность. Rust запускается почти на любом устройстве: от компьютеров и смартфонов до банкоматов и умных часов.
- Многопоточность. Программы на Rust умеют выполнять несколько операций одновременно, эффективно используя мощности процессора.
- Высокие зарплаты программистов. По данным «Хабр Карьеры», средняя зарплата разработчика — 242 тысячи рублей. Деньги действительно большие, но есть нюанс — о нём ниже.
Есть у Rust и недостатки — их немного, но давайте их тоже разберём:
- Ограниченная поддержка ООП. Например, нельзя без костылей реализовать полноценное наследование кода и классы.
- Частые обновления. Синтаксис Rust меняется с каждой новой версией, поэтому разработчикам приходится постоянно переучиваться. С другой стороны, язык в итоге становится безопаснее и удобнее в использовании.
- Низкая популярность. На HeadHunter мы нашли всего 140 вакансий для Rust-разработчиков по всей России — при этом компании в основном ищут опытных специалистов, а предложений для джунов совсем немного.
Подходит ли Rust новичку?
Несмотря на любовь программистов к Rust, у этого языка довольно высокий порог входа. Чтобы начать работать, нужно долго учиться: осваивать сам язык, параллелизм, работу с памятью и другие сложные концепции. Поэтому ответ на вопрос будет зависеть от вашего опыта и скиллов.
Если вы только начинаете изучать программирование, лучше подыскать что-то более востребованное и лёгкое в освоении. Скажем, тот же JavaScript — сейчас это один из самых популярных языков в России. На нём пишут всю видимую часть интернета: интерфейсы, кнопки, слайдеры и прочую красоту. Если хотите писать код и сразу видеть результат — лучше варианта не найти.
Но если вы уже умеете программировать на C++ или Java и кто-то предлагает вам сменить профиль — есть смысл задуматься о переходе. Rust — быстрый, безопасный и компактный язык, он отлично подходит для разработки сложных проектов и систем. С ним вы будете застрахованы от случайных ошибок и утечек памяти.