Что пишут на rust
Перейти к содержимому

Что пишут на rust

  • автор:

Rust: зачем он нужен, где применяется и за что его все любят

Рассказываем о быстром и надёжном языке программирования от Mozilla, который назвали совсем не в честь компьютерной игры.

Фото: NBC / Getty Images

Максим Сафронов

Максим Сафронов

Автор, редактор, IT-журналист. Рассказывает о новых технологиях, цифровых профессиях и полезных инструментах для разработчиков. Любит играть на электрогитаре и программировать на Swift.

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 для вывода текста на экран:

С другой стороны, можно отключить безопасный режим с помощью блока 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 — быстрый, безопасный и компактный язык, он отлично подходит для разработки сложных проектов и систем. С ним вы будете застрахованы от случайных ошибок и утечек памяти.

Читайте также:

  • С++: что нужно знать об этом языке программирования
  • Задача про директора и график смен программистов
  • С какого языка начать изучение программирования

Rust — молодой и дерзкий язык программирования

Первая версия языка Rust появилась в 2010 году, и он сразу занял третью строчку в списке любимых языков разработчиков на StackOverflow. Год спустя Rust возглавил этот список и держался там несколько лет. Давайте посмотрим, почему этот язык стал таким популярным, в чём его особенности и почему вокруг него много споров.

В чём идея языка Rust

Автору языка нравилась скорость работы и всемогущество языка C++ и надёжность Haskell. Он поставил перед собой задачу совместить оба этих подхода в одном языке, и за несколько лет он собрал первую версию языка Rust.

Rust позиционируется как компилируемый системный мультипарадигмальный язык высокого уровня. Сейчас поясним, что это значит.

�� Компилируемый язык означает, что готовая программа — это отдельный файл, который можно запустить на любом компьютере с нужной операционной системой. Для запуска не нужно устанавливать среду разработки и компилятор, достаточно, чтобы скомпилированная версия подходила к вашему компьютеру.

�� Системный — это когда на языке пишут программы для работы системы в целом. Это могут быть операционные системы, драйверы и служебные утилиты. Обычные программы тоже можно писать на Rust — от калькулятора до системы управления базами данных. Системный язык позволяет писать очень быстрые программы, которые используют все возможности железа.

�� Мультипарадигмальный значит, что в языке сочетаются несколько парадигм программирования. В случае Rust это ООП, процедурное и функциональное программирование. Причём, ООП в Rust пришло из C++, а функциональное — из Haskell. Программист может сам выбирать, в каком стиле он будет писать код, или совмещать разные подходы в разных элементах программы.

Синтаксис и код

За основу синтаксиса в Rust взят синтаксис из C и C++.Например, классический «Привет, мир!» на Rust выглядит так:

fn main() println!(«Hello, world!»);
>

Если вы знакомы с подобным синтаксисом, то сможете быстро начать писать и на Rust. Другое дело, что в Rust есть свои особенности:

  • переменные менять нельзя, а если нужно — при объявлении указывают ключевое слово mutable;
  • все команды внутри условных операторов, циклов и других блочных конструкций обязательно брать в фигурные скобки, даже если там будет всего одна команда;
  • аргументы у условных операторов, например if или while, в скобки брать не нужно;
  • при объявлении переменной можно использовать условный оператор:

let x = if new_game() < 4 >
else if reload() < 3 >
else

Последнее разберём подробно. При такой записи переменная x будет равна четырём, если функция new_game() вернёт значение true. Если этого не случится, компилятор вызовет функцию reload() и проверит, что получилось. Если true, то x примет значение 3, а если и это не сработает — то x станет равным 0.

Ещё в Rust есть сравнение переменной с образцом. В зависимости от того, с каким образцом совпало значение переменной, выполнится та или иная функция:

// смотрим, что лежит в переменной my_number и в зависимости от этого выводим что-то на экран alt my_number < 0 < std::io::println("Ноль"); >1 | 2 < std::io::println("Один или два"); >3 to 10 < std::io::println("От трёх до десяти"); >_ < std::io::println("Что-то другое…"); >>

Главная особенность программ на Rust

Несмотря на синтаксис, похожий на C, главную особенность программ на Rust разработчики взяли из Haskell, и звучит она так:

Если программа на Rust скомпилировалась и не упала во время запуска, то она будет работать до тех пор, пока вы сами её не остановите.

Это значит, что программы на Rust почти так же надёжны, как программы на Haskell. Почти — потому что если программист использует «небезопасный» блок unsafe, который даёт ему прямой доступ к памяти, то в теории это иногда может привести к сбоям. Но даже с такими блоками Rust старается справляться сам и падает только в безнадёжных случаях.

Плюсы и минусы языка

Когда язык совмещает в себе несколько разных подходов из других языков, он получает большинство преимуществ каждого из них:

  • высокая скорость работы программ;
  • возможность написать код в ООП-стиле: с классами и объектами (но есть ограничения);
  • стабильность в работе и при компиляции;
  • компилятор сам предлагает варианты исправления ошибок в коде;
  • кросс-платформенный компилятор;
  • поддержка многопоточности;
  • поддержка «небезопасных» блоков для прямой работы с памятью;
  • можно вставлять код на C и C++.

Минусы в основном связаны со скоростью развития языка. Так как Rust развивается очень быстро, то часто бывает так, что код из старой версии не работает в новой версии. Ещё к минусам можно добавить:

  • избыточную документацию, которая иногда противоречит сама себе;
  • меняющийся от версии к версии синтаксис;
  • неполную поддержку ООП и сложную работу с объектами и наследованием.

Что написано на Rust

Чаще всего Rust используют в тех проектах, где нужна стабильность и надёжность при высокой нагрузке и общее быстродействие программы.

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

  • Dropbox — серверная часть, которая отвечает за синхронизацию.
  • Coursera — большая часть фронт- и бэкенда написана на Rust.
  • Mozilla: Firefox и sccache (распределённый кэш для компилятора).
  • OpenDNS — сервис для использования общедоступных DNS-сервисов.
  • Servo — браузерный движок с многопоточностью.
  • Twitter — использует Rust для высоконагруженной части сервиса.

Rust очень любят, но что в нём особенного?

Рассказываем, что послужило причиной популярности языка программирования Rust, чем он превосходит другие языки и в чём его минусы.

Rust оказывается самым любимым языком по версии StackOverflow шесть лет подряд. В чём его секрет? Короткий ответ — Rust избавлен от болевых точек, которые есть во многих современных языках программирования.

Мы рассмотрим несколько примеров того, как Rust справляется с проблемами других языков и его недостатки, которые тоже присутствуют.

Наследник динамически типизированных языков

Споры между программистами, которые предпочитают динамическую типизацию статической, вероятно, будут продолжаться еще десятилетия, но трудно спорить о преимуществах статических типов.

Развитие таких языков, как TypeScript и наличие таких возможностей, как аннотации типов в Python, свидетельствуют о том, что люди разочаровались в текущем состоянии динамической типизации.

Статически типизированные языки позволяют использовать ограничения на данные и их поведение, проверяемые компилятором, что снижает когнитивные издержки и недопонимание.

Однако не все способы статической типизации эквивалентны. Многие статически типизированные языки поддерживают концепцию NULL.

Это значит, что любое значение может отсутствовать, таким образом создавая второй возможный тип для каждого типа. Как Haskell и некоторые другие современные языки программирования, Rust реализует эту возможность с помощью типа optional, и компилятор требует, чтобы вы указывали case None.

Это предотвращает возникновение ошибки: TypeError: Cannot read property ‘foo’ of null во время выполнения программы, вместо этого ошибка появляется ещё во время компиляции, и вы можете устранить её до того, как пользователь ее увидит. Вот пример функции для приветствия кого-либо независимо от того, знаем мы его имя или нет; если бы мы забыли случай None в match или попытались использовать имя так, как если бы оно было всегда присутствующим строковым значением, компилятор выдал бы ошибку.

fn greet_user(name: Option) < match name < Some(name) =>println!("Hello there, <>!", name), None => println!("Well howdy, stranger!"), > > 

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

Хотя это удобно в начале разработки, снижается способность компилятора предоставлять полезную информацию об ошибках, в случае несовпадения типов. Rust учится на обоих этих стилях и требует, чтобы элементы верхнего уровня, такие как аргументы функций и константы, имели явные типы, позволяя при этом выводить типы внутри тел функций. В этом примере компилятор Rust может определить тип дважды, 2 и 1, поскольку параметр val и возвращаемый тип объявлены как 32-разрядные целые числа со знаком.

fn simple_math(val: i32) -> i32

Наследник языков со сборщиком мусора

Одним из самых больших преимуществ использования системного языка программирования является возможность контролировать низкоуровневые детали.

Rust позволяет выбирать между хранением данных в стеке или в куче и во время компиляции определяет что память больше не нужна и может быть очищена. Это позволяет эффективно использовать память. Tilde — один из первых пользователей Rust в своем продукте Skylight, обнаружил, что им удалось сократить использование памяти с 5 ГБ до 50 МБ, переписав некоторые конечные точки HTTP на Java в Rust. Такая экономия становится особенно значимой, когда облачные провайдеры меняют цены на дополнительную память.

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

Обладая прямым доступом к оборудованию и памяти, Rust является идеальным языком для разработки встраиваемых и bare-metal систем. Вы можете писать код чрезвычайно низкого уровня, например ядра операционной системы или приложения для микроконтроллеров. Основные типы и функции Rust, а также переиспользуемый библиотечный код отлично работают в этих особенно сложных средах.

Наследник языков системного программирования

Большинство людей рассматривают Rust как альтернативу таким языкам системного программирования, как Си или C++. Самое большое преимущество Rust — это проверка заимствований. Это часть компилятора, ответственная за то, чтобы ссылки не переживали данные, на которые они ссылаются, это помогает устранить целые классы ошибок, вызванных небезопасным использованием памяти.

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

let squares: Vec = (0..10).map(|i| i * i).collect(); 

В тех случаях когда безопасного Rust недостаточно мы можете использовать небезопасный Rust. Это даёт дополнительные возможности, однако вы сами должны следить за тем, что код безопасен. Этот код затем может быть заключен в абстракции более высокого уровня, которые гарантируют, что все виды использования абстракции безопасны.

Использование небезопасного Rust должно быть обдуманным решением, поскольку его правильное использование требует столько же размышлений и осторожности, как и в любом другом языке, в котором вы несете ответственность за предотвращение неопределенного поведения. Сведение к минимуму небезопасного кода — лучший способ свести к минимуму возможности сбоев и уязвимостей из-за небезопасности памяти.

Языки системного программирования подразумевают, что они будут эффективно существовать вечно. В то время как некоторые современные разработки не требуют такого срока службы, многие компании хотят знать, что их фундаментальная база кода будет пригодна для использования в обозримом будущем. Rust признает это и принял сознательные дизайнерские решения, касающиеся обратной совместимости и стабильности; это язык, разработанный на ближайшие 40 лет.

Экосистема Rust

Rust больше, чем спецификация языка и компилятор; многие аспекты создания и поддержки программного обеспечения промышленного качества рассматриваются как объекты первого класса. С помощью rustup можно установить несколько параллельных цепочек инструментов Rust и управлять ими. Rust поставляются с Cargo — инструментом командной строки для управления зависимостями, запуска тестов, создания документации и многого другого. Поскольку зависимости, тесты и документация доступны по умолчанию, их использование широко распространено. crates.io — это сайт сообщества для обмена и поиска библиотек Rust. Любая библиотека, опубликованная в crates.io будет иметь свою документацию на docs.rs.

Кроме встроенных инструментов, коммьюнити Rust создало множество средств разработки. Бенчмаркинг, анализ и тестирование на основе свойств — все это легко легко использовать в проектах. Дополнительные линты компилятора доступны в Clippy, а автоматическое форматирование обеспечивается rustfmt. Поддержка IDE хороша и с каждым днем становится всё более эффективной.

Rust имеет яркое, гостеприимное сообщество. Существует несколько официальных и неофициальных способов получить помощь, таких как чат, форум, сабреддит Rust и, конечно же, Stack Overflow. У Rust есть кодекс поведения, который соблюдается потрясающей командой модераторов, поэтому официальные порталы и большинство неофициальных располагают к себе.

В оффлайне Rust проводит множество конференций по всему миру, таких как RustConf, Rust Belt Rust, RustFest, Rust Latam, RustCon Asia и другие.

Не всё так просто

Сильная система типов Rust и акцент на безопасность памяти — все это происходит во время компиляции — означают, что при компиляции кода чрезвычайно часто возникают ошибки. Это может быть неприятным для программистов, не привыкших к такому самоуверенному языку программирования. Тем не менее, разработчики Rust потратили большое количество времени на работу над улучшением сообщений об ошибках, чтобы убедиться, что они понятны и применимы.

Особенно часто можно услышать, как кто-то жалуется, что он «борется с проверкой заимствований». Хотя эти ошибки могут обескураживать, важно признать, что каждое из выявленных мест потенциально могло привести к ошибкам и потенциальным уязвимостям.

В этом примере мы создаем изменяемую строку, содержащую имя, затем берем ссылку на первые три байта имени. Мы пытаемся изменить строку, очистив ее. Теперь ссылки на действительные данные и их разыменование могут привести к неопределенному поведению, поэтому компилятор останавливает нас:

fn no_mutable_aliasing() < let mut name = String::from("Vivian"); let nickname = &name[..3]; name.clear(); println!("Hello there, <>!", nickname); > 
error[E0502]: cannot borrow `name` as mutable because it is also borrowed as immutable --> a.rs:4:5 | 3 | let nickname = &name[..3]; | ---- immutable borrow occurs here 4 | name.clear(); | ^^^^^^^^^^^^ mutable borrow occurs here 5 | println!("Hello there, <>!", nickname); | -------- immutable borrow later used here For more information about this error, try `rustc --explain E0502`. 

К счастью, сообщение об ошибке включает в себя наш код и изо всех сил пытается объяснить проблему, указывая точные места.

Прототипирование в Rust может быть сложными из-за его статически типизированной природы и из-за того, что Rust требует покрытия 100% условий. Крайние случаи должны быть описаны, даже если программист еще не знает, что там должно быть. На ранних стадиях разработки эти крайние случаи часто можно устранить, вызвав сбой программы, а затем можно добавить строгую обработку ошибок на более позднем этапе. Это другой рабочий процесс, он встречается в таких языках, как Ruby, где разработчики часто пробуют код в REPL, а затем переносят его в прототип, вообще не рассматривая случаи ошибок.

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

Хотя Rust твердо привержен стабильности и обратной совместимости, это не означает, что язык доработан. Конкретная проблема может не решаться функциями языка, которые облегчили бы ее выражение или, возможно, даже позволили бы ее выразить. Например, в Rust асинхронные фьючерсы существуют уже более трех лет, но стабильная поддержка async/await появилась не так давно.

Первый опыт разработки игры на Rust

Компилятор Rust использует LLVM, это означает, что количество поддерживаемых платформ будет меньше, чем у C или C++.

Rust

Rust — язык программирования, которым пользуются для написания приложений, кода для высоконагруженных серверов и блокчейна. Особенность этого языка — он быстрый, как C++, но намного безопаснее. У него лаконичный синтаксис, и на нем можно писать в разных стилях.

«IT-специалист с нуля» наш лучший курс для старта в IT

Язык используют такие крупные компании, как VK, Twitter и Dropbox, а также Mozilla, создатель известного браузера Firefox. Движок браузера написан на Rust.

Кроме Mozilla язык помогают развивать Google, Huawei, Microsoft и AWS. Rust бесплатный, у него открытый исходный код, поэтому сообщество разработчиков тоже может вносить вклад в развитие языка.

По версии известного сайта Stack Overflow, язык Rust — один из самых любимых у разработчиков. Такую любовь он завоевал благодаря скорости и мощности, которые сочетаются с высокой безопасностью.

Название читается как «раст», изредка также произносят «руст». Это не совсем верное произношение, но так тоже говорят.

Профессия / 8 месяцев
IT-специалист с нуля

Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

vsrat_7 1 (1)

Где применяется язык Rust

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

Вот несколько примеров сфер, где могут понадобиться разработчики на Rust и где применяется этот язык.

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

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

Прикладные программы. Десктопное программное обеспечение тоже можно писать на Rust. Это доказывает пример Mozilla Firefox — браузера, движок которого написан на этом языке. Язык позволяет быстро и эффективно обрабатывать данные и отрисовывать страницы, ведь при создании разработчики делали упор в том числе на создание браузеров. Пока что программ на Rust не так много, но у этого направления большие перспективы.

Операционные системы. Rust — мощный язык, на котором можно с нуля написать ОС. Но на такое мало кто решается. А вот в уже известных операционных системах его вполне используют. Например, некоторые компоненты операционной системы Windows написаны на Rust. Есть и более специфические проекты — ОС для устройств «умного дома» Tock и Unix-подобная система Redox.

Машинное обучение. ML — еще одна сфера, где бывают нужны сложные и быстрые вычисления. Поэтому Rust применяют в этом направлении довольно активно. Для языка уже создали много библиотек и фреймворков специально для обучения моделей, обработки датасетов и других специфических задач. Rust используют в анализе данных, в Big Data и прочих похожих направлениях — это отличный язык для будущего дата-сайентиста.

Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить

В чем особенности языка Rust

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

Вот как выглядит этот язык изнутри. Некоторые его особенности похожи на C++, но есть и изменения — они как раз направлены на повышение безопасности и удобства в работе.

Компилируемость. Rust — компилируемый язык. Это значит, что перед выполнением написанная на нем программа переводится в машинные коды — их выполняет система. Переводом занимается специальная программа — компилятор.

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

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

Статическая типизация помогает избежать ошибок при программировании, а еще делает код более четким, читаемым и понятным. Разработчик может посмотреть на объявление переменной и сразу понять, что в ней хранится. Также это плюс к безопасности языка — со статическими типами сложнее допустить серьезную, но малозаметную ошибку.

Мультипарадигмальность. Rust дает разработчику возможность писать в разных парадигмах программирования: функциональной, процедурной и других. Правда, для объектно-ориентированного программирования он подходит не всегда, но реализовать сущности этой парадигмы в нем все же можно.

Многопоточность. Одна из важных особенностей Rust — способность к многопоточности. Программы, написанные на этом языке, могут выполняться в нескольких «потоках», которые идут параллельно друг другу. Такая же возможность есть у C++, Go и некоторых других языков программирования. Она позволяет эффективнее работать со сложными вычислениями и высокой нагрузкой. Также эта возможность незаменима при создании программ, которые должны уметь выполнять несколько действий одновременно: например, решать какую-то задачу и одновременно откликаться на запросы пользователя.

Эффективная работа с памятью. Чтобы программа могла работать, ей нужно выделять оперативную память под задачи, например, для хранения данных. В работе с ними есть два подхода:

  • выделение памяти вручную, как в C++ и похожих языках. Это позволяет гибко работать с памятью и ее потреблением, но взамен делает разработку сложнее и повышает риск ошибки. Можно забыть очистить память или допустить ее утечку.
  • автоматические выделение и очистка памяти, как в C# или Java. Память для переменных выделяется автоматически, а когда она перестает быть нужна — очищается с помощью специального «сборщика мусора». Писать код на таких языках проще, но встроенные системы часто оказываются неэффективными в плане использования памяти.

Rust объединяет оба подхода. В нем нет сборки мусора, разработчик может сам выделять и очищать память — но при этом в язык встроен кодовый анализатор. Он подсказывает, где память может «утечь», и следит за риском ошибок. Это помогает одновременно писать эффективный код и не так часто ошибаться.

«Защита от дурака». Многие фишки Rust нужны, чтобы сделать использование языка безопаснее. Например, переменные в языке по умолчанию неизменны — чтобы они стали изменяемыми, нужно прописать для них специальное ключевое слово.

В Rust много таких особенностей. Компилятор этого языка построен так, чтобы выдавать ошибку при любом отхождении от строгого стандарта написания кода. Это тоже важное отличие от C++, который вполне может выполнить неправильный код, а потом выдать владельцу неверный результат или зависнуть.

Владение. Интересная особенность Rust — механизм владения, или ownership. У каждого набора данных, заключенного в переменную или структуру, может быть только один «владелец» — какая-то сущность. Поэтому две разных сущности не могут одновременно обратиться к одним и тем же данным — следовательно, конфликта не возникнет. Это еще один плюс к безопасности языка.

Преимущества Rust

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

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

Код на Rust компактный, легко читаемый, сам по себе язык эффективный, и в нем много возможностей для облегчения жизни программиста.

Безопасность. Большое внимание к безопасности кода — одна из ключевых особенностей Rust, и за это его ценят разработчики. В кругах программистов есть выражение «стрелять себе в ногу»: так называют действия разработчика, которые приводят к неожиданной ошибке в коде. Rust же дает программистам «предохранитель» от таких «выстрелов». Риск допустить ошибку серьезно снижается, а значит, и код пишется быстрее.

Существует небезопасная версия языка, но пользоваться ею необязательно — за исключением каких-то очень специфических задач.

Умный компилятор. Это продолжение предыдущего пункта. Компилятор в Rust — очень подробный, он отслеживает мельчайшие ошибки и говорит о них понятным разработчику языком. Так намного удобнее отлаживать код, чем при работе с компиляторами, выдающими непонятные данные.

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

Универсальность. Rust прекрасно работает с высокими уровнями абстракции. Поэтому разработчик может не думать о низкоуровневых «железных» вещах, если не хочет. Но одновременно с этим язык дает разработчику доступ к более низким уровням: «железу», процессам, памяти. Это делает Rust универсальным, подходящим и для низкоуровневого, и для высокоуровневого программирования.

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

Недостатки Rust

Малое количество вакансий. Большинство вакансий для разработчиков на Rust связано с блокчейном и криптовалютами. Если человек не хочет работать в этой сфере, возможностей найти работу для него становится намного меньше. В России это пока не слишком популярный язык: большинство существующих проектов давно работает на других языках, а стартапам не всегда подходят особенности Rust. Но, возможно, в будущем многое изменится. Все же Rust — довольно молодой язык: первая версия вышла в 2006 году.

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

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

Как начать изучать язык Rust

Мы советуем начинать обучение языку Rust, если вы уже имеете представление о программировании. Легче всего его изучить, если это не первый ваш язык. Но и новички могут его освоить — просто понадобится приложить больше усилий.

Скачать компилятор языка и установить его можно на официальном сайте проекта. Разработчику предлагают воспользоваться утилитой-установщиком или установить Rust через командную строку.

Также на официальном сайте есть «песочница», позволяющая поработать с Rust онлайн и ничего не устанавливать на свой компьютер. Она подойдет для теста возможностей языка, но не для полноценного программирования.

Начните с простых программ, постепенно переходя к более сложным возможностям. До многопоточности и продвинутой работы с памятью вы дойдете не сразу — это нормально.

Если вы хотите узнать больше о разработке — записывайтесь на курсы! Мы поможем определиться с профессией и стать востребованным специалистом.

IT-специалист с нуля

Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

картинка (75)

Статьи по теме:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *