Оценка Rust и его экосистемы

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

  1. В этот раз как следует изучить язык программирования Rust, его инструменты и экосистему, и
  2. Внимательно изучить спецификацию RISC-V, доступную на официальном сайте.

Как вы уже догадались, я только что удовлетворительно выполнил (1) и готов перейти к (2) в ближайшие дни. Но прежде чем двигаться дальше, я решил, что должен поделиться своим опытом работы с Rust, поскольку я обнаружил, что это замечательный язык с замечательным сообществом и экосистемой. Неудивительно, что он вошел в ядро Linux, и многие старшие разработчики, с которыми я сталкивался, клянутся им.

Rust, язык

Если бы мне пришлось подвести итог программированию на Rust одним предложением, то это было бы следующее:

Программирование на Rust сродни программированию на C, но со строгостью Haskell.

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

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

Rust, сообщество

Одна из многих вещей, которые произвели на меня впечатление в Rust, помимо дизайна самого языка, — это сообщество, а точнее, доступные обучающие ресурсы. Для изучения основ Rust я следовал «The Rust Programming Language», широко известному среди Rustaceans (так любят называть себя программисты на Rust) как «книга», которая является официальной вводной книгой по программированию на Rust, предлагаемой непосредственно сообществом Rust. На момент написания книги (2022-08-31) она состоит из 20 глав, наполненных большим количеством обновленных, рабочих примеров кода и подробных объяснений того, как все работает и почему именно так, а также предложений по упражнениям и мини-проектам, которые можно выполнять (или игнорировать), чтобы укрепить свои знания в определенной области Rust.

Пройдя «книгу», я должен сказать, что она намного глубже и подробнее, чем любой другой бесплатный учебник по программированию, который вы можете найти в Интернете. Она охватывает все — от фундаментальных основ, таких как базовый синтаксис, система типов и использование общих встроенных структур данных, до таких продвинутых тем, как архитектура и управление проектами, параллельное программирование и метапрограммирование с помощью макросов. Честно говоря, создается впечатление, что «книга» может быть использована в качестве учебного пособия в стандартном курсе информатики (CS) для бакалавров. Однако она предполагает некоторый предварительный опыт программирования, что, на мой взгляд, является разумным компромиссом для изучения такого мощного языка.

Rust, экосистема

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

  • Встроенная поддержка модульного и интеграционного тестирования в стиле разработки, управляемой тестами (TDD). Да, вам даже не нужно искать и устанавливать ваш любимый фреймворк TDD, потому что он уже встроен в язык по умолчанию!
  • Возможность автоматически генерировать HTML-документацию для любого проекта и его зависимостей с помощью cargo docs — она выглядит и ведет себя точно так же, как официальная документация, которую можно найти в Интернете!
  • Возможность генерировать соответствующую версию «книги» для установленной версии компилятора Rust с помощью rustup.
  • Возможность автоматически запускать тесты в блоках кода в сгенерированной HTML-документации с помощью cargo test для проверки того, что они действительно работают.

Заключение

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

Каков ваш опыт работы с Rust и его экосистемой, если таковой имеется? Не стесняйтесь обсуждать это ниже!

Оцените статью
devanswers.ru
Добавить комментарий