Еще пару месяцев назад я даже не знал о существовании такого языка программирования как Rust. В рамках работы над новый проектом мне довелось познакомиться с этим прекрасным языком. Данный язык обладает целым рядом преимуществ, которые не оставили меня равнодушным.
В данной статье хотелось бы осветить некоторые моменты работы с языком, а также рассказать о простоте его использования.
Процесс установки
Rust приветствовал меня простейшим процессом установки своего rustup toolchain. Rustup дает возможность без труда установить нужную версию Rust, переключение между stable и nightly сборками происходит в одну команду. При выходе обновления достаточно ввести команду rustup update и toolchain сделает за вас всю работу.
Встроенный менеджер зависимостей и не только
В Rust присутствует встроенный менеджер зависимостей Cargo. Для Rust существует множество пользовательских библиотек размещенных на Crates.io. Для того чтобы использовать одну из них, достаточно добавить зависимость в Cargo.toml файл. При следующем запуске или билде проекта Cargo скачает все необходимые файлы, а используя команду cargo doc вы получаете документацию по всем используемым библиотекам.
Иммутабельность
По умолчанию все переменные в Rust иммутабельные. На первый взгляд иммутабельность может показаться весьма неудобной, однако со временем начинаешь замечать, что довольно редко возникает необходимость делать переменную мутабельной. В итоге используя иммутабельные переменные мы повышаем безопасность своего кода, а также облегчаем поиск мест где изменение значения переменной могло привести к ошибке.
Рассмотрим простой пример: объявим иммутабельную переменную, проинициализировав её каким-то значением, а затем попробуем изменить это значение.
Вполне ожидаемо получим ошибку следующего вида:
Не беда! Просто делаем переменную counter мутабельной:
Проблема решена:
Как видно из примера, мы никак не ограничены в создании мутабельных переменных, если это необходимо. Также если мы объявим мутабельную переменную без надобности, Rust компилятор любезно предложит сделать её иммутабельной:
Время жизни переменных
В Rust значение переменной жестко связано с ее именем. Связанные имена как бы “владеют” своим значением. Данная концепция называется Ownership. Если в какой-то момент мы присвоили значение одной переменной другой – время ее жизни окончено и попытка её дальнейшего использования приведёт к ошибке:
Такая же ситуация возникнет при передаче переменной функции. Данное свойство называется borrowing (заимствование). В подобных ситуациях нам следует четко определиться действительно ли нам нужна копия переменной и если ответ – да, то мы можем попросту её клонировать.
Если же нам не нужна копия переменной – используем указатель, что позволит нам сэкономить память:
Изначально данный подход казался мне весьма сложным и неудобным, но в итоге он приучает к грамотному и рациональному использованию памяти, а следственно написанию хорошо оптимизированного кода.
Большинство ошибок выявляется на стадии компиляции
На мой взгляд, один из самых больших плюсов языка – это то, что большинство ошибок выявляется на стадии компиляции. Иногда написать рабочий код на Rust оказывается на порядок сложнее чем на других языках, однако после того как код скомпилировался, вероятнее всего он будет работать именно так как это и было задумано, а если в вашей программе еще и написаны тесты, то вы практически со 100% вероятностью получите желаемый результат. При этом компилятор Rust обладает отличными подсказками и большинство ошибок выявляется и исправляется довольно быстро.
Итоги
Изучая Rust, я пополнил свой арсенал невероятно мощным инструментом для системного программирования, а также по-новому взглянул на казалось бы давно знакомые вещи.
Для тех, кто решится попробовать Rust, существует подборка руководств, в которых проводятся аналогии с другими популярными языками программирования.
Post A Reply