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

Менеджер пакетов

Rust - один из немногих языков, в котором есть встроенный менеджер пакетов (он называется Cargo). Работа с Cargo - абсолютное удовольствие по сравнению с некоторыми другими менеджерами пакетов. Он использует синтаксис TOML, который довольно выразителен и очень прост в изучении.

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

Cargo также имеет встроенное модульное и интеграционное тестирование. Вам просто нужно добавить #[cfg(test)] перед модулем, чтобы включить его. Затем он запустит все методы внутри модуля тестирования и перехватит все сделанные утверждения. Это далеко от других языков, где для большинства из них доступно множество наборов тестов, которые могут сбивать с толку начинающих программистов.

Компилятор

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

Компилятор очень подробный и предоставляет много контекста для источника вашей ошибки. Компилятор не только сообщает вам, в чем заключается ошибка и где ее найти, но также предоставляет код прямо в терминале. Он выделяет определенные неправильные части строки. Также есть подробные объяснения того, почему ваш код неправильный, и, что наиболее впечатляюще, он даже может сказать вам, как это исправить. Обратите внимание, что на изображении выше компилятор говорит мне добавить ключевое слово mut перед window. Если компилятор не может предоставить прямое исправление для вашего кода, он все равно предоставит команду для более подробного объяснения - обычно в форме rust --explain {error_code}. И в отличие от некоторых языков программирования, таких как C ++, команда не указывает на какой-либо URL, а вместо этого показывает документацию прямо внутри терминала.

Также разрабатываются инструменты для IDE. Нет хорошей IDE, такой как VS Studio или JetBrains IDE для Rust, но есть расширения для VS Code и Atom. Он работает достаточно хорошо, но явно не так развит, как другие инструментальные решения.

Язык

Поскольку Rust является более новым языком, он может разрабатывать свой язык на основе современных функций, которые мы ожидаем сегодня, что не является роскошью для большинства других языков. Старые языки, такие как C / C ++, стали довольно сложными, потому что им пришлось добавлять современные функции, сохраняя при этом поддержку устаревшего кода. Rust не страдает от этого бремени, поэтому язык кажется очень современным. Код, написанный на Rust, довольно легко читать. Например, асинхронная функция в JavaScript записывается так: (await fn()).map(someMapFunction).join('\n'). Сравните это с Rust: fn().await.map(someMapFunction).join('\n'), где нет необходимости во внешнем парантезе. Подобные мелкие детали складываются при работе с длинными цепочками вызовов функций.

В Rust также есть много функциональных методов, таких как map(), filter(), find(). Это функции, которые ЕЩЕ отсутствуют в стандартном C ++. Замыкания Rust также довольно просты в использовании и больше отражают рабочий процесс обратного вызова JavaScript или Ruby, чем C ++. Впечатляет, что в Rust есть все эти дополнительные функции, учитывая, что по производительности он не уступает C / C ++.

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

Я также большой поклонник черт Result и Option. Хотя он может быть более подробным, чем просто возврат nullptr, он заставляет вас явно задуматься о том, что происходит, если функция на самом деле не возвращает никакого значения. Я много раз забывал написать случай, когда значение равно null при написании на таких языках, как Java или C ++, но не в Rust.

Предостережения

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

Хотя в экосистеме Rust поддерживается приличное количество библиотек, многие из них нестабильны или заброшены. Просто зайдите на crates.io и ищите что угодно. Иногда для одного и того же есть несколько десятков пакетов. В этом нет необходимости, и может быть трудно найти, какие пакеты действительно стоит использовать.

Принятие

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

Microsoft также очень громко заявляла о своем принятии Rust.

Как мы видели, примерно 70% проблем безопасности, которым MSRC назначает CVE, являются проблемами безопасности памяти. Это означает, что если бы это программное обеспечение было написано на Rust, 70% этих проблем с безопасностью, скорее всего, были бы устранены. И мы не единственная компания, сообщившая о таких результатах.

Они также будут предоставлять поддержку Windows API непосредственно в Rust. Это означает, что у нас будет доступ к таким мыслям, как WinAPI, прямо в Rust без какой-либо вспомогательной библиотеки.

В целом, я бы сказал, что на Rust стоит взглянуть. Однако это немного грубовато, что не обязательно удивительно, поскольку Rust относительно новый (он был создан в 2007 году). Поначалу это также может немного сбивать с толку, особенно если вы в основном кодируете на языке более высокого уровня, таком как JavaScript или Ruby. В целом, язык находится в очень хорошем состоянии и имеет большой потенциал в будущем.