Вы когда-нибудь были в ситуации, когда ваш код недостаточно быстр, но вы исчерпали свои возможности? Я думаю, пришло время застегнуть штаны большого мальчика и переписать на C++… верно? Ну, а что, если я скажу вам, что есть еще один вариант.
Последние 6 месяцев я изучаю Rust; язык системного программирования, который дает вам более низкий уровень контроля над вашим программным обеспечением (как в C/C++), но при этом удобен для изучения и использования.

Зачем учить новый язык?
Последние пару лет я в основном писал на Python, и мой наставник упомянул, что изучает Rust. Он показал мне часть написанного им игрушечного кода, исчерпывающее сопоставление с образцом и потрясающий компилятор (если вы не понимаете, о чем я говорю, просто продолжайте читать). Это звучало круто для работы, но кривая обучения была крутой, и я еще не совсем подсел на Rust.
Как и большинству разработчиков, мне было удобно с языком. Моей первой любовью был Python; синтаксис и семантика просты, легко начать писать что-то новое, есть внешние библиотеки, которые позволяют делать практически все, и самое главное, я знаком с этим. Так зачем же проходить через работу, чтобы выучить что-то новое? Однажды на работе (в то время я был в магазине Python) мы хотели написать какой-нибудь производительный код, который собирал бы данные из внешних источников, но процесс маршалинга Python был узким местом.
Маршалинг — это процесс преобразования данных из представления в памяти в представление данных, которое можно легко хранить и передавать.
Я понял, что если основной процесс маршалинга был ограничен, мы мало что могли сделать для повышения производительности… кроме как переписать код на новом языке. Язык, на котором я был женат, просто не мог делать то, что мне нужно… и тогда я решил, что пришло время выучить новый язык.
Так почему же Rust?
Разные языки кодирования могут делать разные вещи. Когда вы думаете о JavaScript, вы думаете о веб-сайтах (в основном, о внешнем интерфейсе). Когда вы думаете о Ruby, вы думаете о бэкэнде в Rails. Когда вы думаете о C или C++, вы думаете о системном программировании и головной боли. И когда вы думаете о Python, вы думаете, черт возьми, я могу сделать что угодно со всеми этими библиотеками.
Поэтому, когда вы выбираете язык, вы должны помнить, что вы планируете создавать с его помощью. Лично у меня уже есть Python в моем наборе инструментов, поэтому я не был сосредоточен на простом для изучения языке, который я мог бы использовать для создания серверных сервисов. Вместо этого я хотел выучить язык более низкого уровня, который дал бы мне больший контроль над моими ресурсами и мог бы использоваться для производительного системного программирования. Приложения, которые я буду писать, по-прежнему, скорее всего, будут бэкэнд-сервисами, но на этот раз мои приоритеты будут другими.
Что хорошо в Rust, так это то, что он похож на Python в том смысле, что его можно использовать во всех типах различных приложений. Внешние ящики (это то, что Rust называет библиотеками) и фреймворки позволяют вам создавать вещи, от личных инструментов CLI до серверных служб и игр. Это облегчило мой выбор, так как я знал, что Rust может быть инструментом, который я использую, когда Python недостаточно хорош.
Несколько других вещей действительно бросились мне в глаза, когда я изучил Rust. Во-первых, активное сообщество, хотя оно еще не такое активное и большое, как Python, но явно растущее сообщество. Все больше людей изучают и начинают использовать Rust, а это означает, что появляется больше ящиков и больше людей, которые отвечают на ваши «тупые» вопросы на форумах. Сейчас он даже используется во многих крупных компаниях, включая Microsoft, Facebook, Amazon и другие. Во-вторых, Rust изначально компилируется в WASM (веб-сборка).
«WebAssembly (сокращенно Wasm) — это двоичный формат инструкций для виртуальной машины на основе стека. Wasm разработан как переносимая цель компиляции для языков программирования, позволяющая развертывать в Интернете клиентские и серверные приложения».
Проще говоря, код Rust можно скомпилировать и запустить в веб-браузере, что упрощает его распространение. Отличным приложением для этого является Figma — они перешли на использование Rust, когда их веб-приложение начало работать слишком медленно. В-третьих, компилятор Rust. Rust — это компилируемый язык, что означает, что перед распространением код конвертируется в двоичный исполняемый файл. Это позволяет две большие вещи; код можно проверить на наличие ошибок при компиляции, а для выполнения кода не требуется интерпретатор времени выполнения. Это означает, что перед тем, как вы опубликуете свое приложение для запуска в рабочей среде, Rust выдаст ошибку и проверит все, чтобы убедиться, что оно не взорвется при запуске. Отсутствие интерпретатора среды выполнения означает, что двоичный файл можно загрузить и запустить без дополнительной настройки. Дополнительный бонус: практически без времени выполнения Rust работает быстро, ЧРЕЗВЫЧАЙНО БЫСТРО!
Язык, который хорошо поддерживается, легко распространяется, делает все возможное, чтобы убедиться, что в нем нет ошибок, и он чертовски быстр. Есть только одна проблема, Rust сложно изучить.
Как я начал изучать Rust?
Мой подход к обучению прост; сначала вы изучаете строительные блоки, а затем что-то строите, по крайней мере, так я думал.
Мне нравится начинать с простых вещей, которые позволяют мне войти в дверь и сразу же что-то построить. Это поддерживает мою мотивацию и дает мне возможность применять язык на раннем этапе. Затем я многократно продолжаю учиться и развивать навыки, которые я только что приобрел, чтобы закрепить свое обучение. Навык лучше всего усваивается, когда вы рискуете и используете его для себя.
Мое путешествие по Rust началось с нескольких простых руководств на YouTube. К сожалению, вскоре я понял, что язык сам по себе достаточно сложен, и грубого понимания основных строительных блоков недостаточно для создания чего-то осмысленного. Язык вводит множество новых концепций, специфичных для него, в том числе; право собственности, сопоставление с образцом, черты, продолжительность жизни и… я остановлюсь здесь, пока не напугал вас.
Не бойтесь, сообщество здесь! Затем я начал работать над Книгой по программированию на Rust. Я настоятельно рекомендую эту книгу — она хорошо развивается, а сложность содержания увеличивается линейно, так что вы не будете перегружены ни на одном этапе пути. Книга также отформатирована с практическими проектами и задачами между главами, так что вы можете практиковать и укреплять свое обучение. В целом, Rust отлично справился с документацией и процессом обучения.
Оно того стоило?
Изучение Rust вернуло меня на начальный уровень изучения программирования. Мне пришлось пересмотреть концепции, о которых я не думал со школьных времен, и понял, что переоценил свои знания. Как я упоминал ранее, мне было удобно работать с Python — языком высокого уровня, который делает большую часть работы за вас.
Если вы не заинтересованы в изучении Rust (и в том, чтобы стать приверженцем Rust), я все же настоятельно рекомендую каждому инженеру-программисту выбрать для изучения новый язык или новую технологию. Когда вы слишком сосредоточены на нише, вы забываете, что там есть что-то еще. Выбирая что-то, что отличается от вашей повседневной жизни, вы открываете для себя новые области программного обеспечения или те, о которых вы забыли.
Что дальше?
Поскольку Rust можно использовать для множества различных приложений, он позволяет мне творчески подходить к тому, что я использую для создания. В последнее время меня увлекла идея разработки игр (хотя я слышал ужасные истории об индустрии в целом). Существует растущее игровое сообщество Rust, и многие фреймворки сейчас используются для создания игр на Rust. Одно из них, которое особенно бросается в глаза, — это «Bevy». Это пока все, что я скажу.
Оставайтесь с нами и оставайтесь любопытными!
Вы нашли эту статью интересной? Дайте мне знать, что вы думаете, оставив комментарий, или рассмотрите возможность подписаться на меня, чтобы продолжать узнавать о моем путешествии.