Код
#статьи

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++, внешне они очень похожи. Посмотрите, как выглядит одна и та же функция, написанная на этих языках:

Скриншот: PVS-Studio / Skillbox Media

Такой синтаксис называют си-подобным — потому что его корни восходят к языку С, который появился ещё в далёких семидесятых. Сейчас это фактически стандарт корпоративной разработки — если знаете такой синтаксис, сможете быстро пересесть на Java, Swift, C# и любой другой современный язык.

Вот, например, как выглядит простая программа на Rust для вывода текста на экран:

fn main() { //Объявление главной функции.
    println!("Привет, читатель!"); //Вывод строки на экран.
}

Разберём, что здесь написано:

  • 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.

Операционная система Redox, полностью написанная на Rust
Скриншот: Skillbox Media

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

Браузерные движки. Не зря же Rust придумали в Mozilla — язык изначально заточен именно под браузерную разработку. В нём есть фишки для быстрой отрисовки веб-страниц в режиме многопоточности — можно разбить загрузку сайта на несколько задач и распределить их между ядрами процессора.

Браузер Mozilla Firefox, движок для которого частично написан на Rust
Скриншот: Skillbox Media

Машинное обучение. Rust поддерживает множество библиотек для работы с большими данными: тренировку алгоритмов, визуализацию данных, линейную алгебру, работу с векторами, обработку изображений — всё что угодно. Если в будущем вы видите себя в Data Science — присмотритесь к Rust.

Плюсы и минусы Rust

Вот за что язык ценят компании и разработчики:

  • Скорость и безопасность. Как мы писали выше, программы на Rust работают быстро и ломаются только в безвыходных ситуациях.
  • Статическая типизация. В Rust проверка типов переменных происходит ещё на этапе компиляции — это плюс к надёжности языка.
  • Совместимость с C++. В программах на Rust можно без проблем вызывать блоки кода из С и C++ — и наоборот.
  • Заботливый компилятор. Если в программе случится ошибка, компилятор расскажет, что пошло не так, и даст советы, как всё починить.
  • Кросс-платформенность. Rust запускается почти на любом устройстве: от компьютеров и смартфонов до банкоматов и умных часов.
  • Многопоточность. Программы на Rust умеют выполнять несколько операций одновременно, эффективно используя мощности процессора.
  • Высокие зарплаты программистов. По данным «Хабр Карьеры», средняя зарплата разработчика — 242 тысячи рублей. Деньги действительно большие, но есть нюанс — о нём ниже.

Есть у Rust и недостатки — их немного, но давайте их тоже разберём:

  • Ограниченная поддержка ООП. Например, нельзя без костылей реализовать полноценное наследование кода и классы.
  • Частые обновления. Синтаксис Rust меняется с каждой новой версией, поэтому разработчикам приходится постоянно переучиваться. С другой стороны, язык в итоге становится безопаснее и удобнее в использовании.
  • Низкая популярность. На HeadHunter мы нашли всего 140 вакансий для Rust-разработчиков по всей России — при этом компании в основном ищут опытных специалистов, а предложений для джунов совсем немного.

Подходит ли Rust новичку?

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

Если вы только начинаете изучать программирование, лучше подыскать что-то более востребованное и лёгкое в освоении. Скажем, тот же JavaScript — сейчас это один из самых популярных языков в России. На нём пишут всю видимую часть интернета: интерфейсы, кнопки, слайдеры и прочую красоту. Если хотите писать код и сразу видеть результат — лучше варианта не найти.

Но если вы уже умеете программировать на C++ или Java и кто-то предлагает вам сменить профиль — есть смысл задуматься о переходе. Rust — быстрый, безопасный и компактный язык, он отлично подходит для разработки сложных проектов и систем. С ним вы будете застрахованы от случайных ошибок и утечек памяти.


Нейросети для работы и творчества!
Хотите разобраться, как их использовать? Смотрите конференцию: четыре топ-эксперта, кейсы и практика. Онлайн, бесплатно. Кликните для подробностей.
Смотреть программу
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована