Чому я перейшов з Node.js на Rust
Всім привіт, мене звати Володимир. Я — Rust Developer у компанії Yalantis, працюю на проєкті у сфері енергетики. Передусім, я — світчер, який понад 5 років працював з Node.js, JavaScript та частково C++. Мій досвід поширюється на компʼютерну графіку; системне програмування та кросплатформену розробку; розробку утиліт для збірки, тестування та налагодження; розробку Node.js аддонів; бекенд та фронтенд, також у мене чималий досвід в open-source.
Rust-ом я почав цікавитись з
Як я почав перехід: ком’юніті, організація воркшопів
Своє знайомство з Rust я почав із rustlings. Це набір невеликих задач, націлених на спрощення процесу звикання до нової мови. Всім відомий rust-book — це, без сумнівів, крута річ і його необхідно пройти усім, хто бажає вивчати Rust. Але на той час мені кортіло швидше застосувати Rust на практиці. Я був приємно вражений наявністю такого інструменту та з захопленням виконував вправи, від тоді мене захопив азарт. Деякі задачі давались складніше через нові концепції та необхідність звикнути до компілятора. Часто користувався підказками та гуглив все незрозуміле. Пізніше я все-таки повернувся до rust-book та зі спортивного інтересу неодноразово проходив курс rustlings від початку. Також можу порадити книгу Programming Rust, 2nd Edition. Від цього моменту ідея розвиватись в напрямку Rust стала пріоритетною, а JavaScript/Node.js я відклав на другий план, хоч і продовжував застосовувати у роботі.
В той самий час у мого колеги виникла нова ідея — створити ком’юніті, щоб вивчати Rust спільнотою і розвиватись разом. На той момент в українському просторі існувала ще одна Rust-спільнота, але вона не була дуже активною, а з часом об’єдналась із новоствореним ком’юніті.
Щоб привабити більшу аудиторію, ми почали розповідати про мову Rust з боку її використання у сфері блокчейну, тоді багатьох людей цікавило саме це. Ми провели офлайн-воркшоп, куди запросили розробника з команди Near. Усі охочі могли долучитись до розробки «іграшкового» блокчейну через контрибуцію до репозиторію на GitHub. Пізніше виникла ідея проводити щотижневу коротку зустріч у діскорді, де учасники обмінювалися знаннями та цікавими знахідками про Rust. Наступні воркшопи були вже пов’язані із графікою та геймдевом. Там ми розробляли гру в шахи: починали з логіки та CLI інтерфейсу, а далі імплементували вже графічну частину. Воркшоп складався з двох частин, по декілька годин на день. У перший день ми займались розробкою логіки гри та CLI інтерфейсу. Другий день був присвячений графічному інтерфейсу гри. Графічна частина реалізувалася за допомогою bevy та egui. Учасники були поділені на команди, що мали власних лідерів. За виконані задачі команда отримувала бали, в залежності від складності виконаного завдання. Деякі завдання залежали від інших, для їх виконання необхідно була кооперація між командами. Наприкінці воркшопу ми визначили переможця за найбільшою кількістю балів та провели демонстрацію результатів роботи. Це був дуже цікавий досвід, раніше я не займався подібним.
Перший проєктний досвід
Можливість використати Rust на справжньому проєкті не змусила довго чекати. Свій перший досвід я отримав працюючи в команді над mvp графічного проєкту для анімації націленого на веб і, в перспективі, на мобільні та десктоп девайси. Особисто я займався налагодженням збірки під різні платформи та питаннями інтеграції wgpu. Тут мав змогу вперше ознайомитись із проєктом cargo-make, який пізніше знайшов застосування у наступному проєкті. Також я отримав досвід розробки на Rust для iOS та Android-пристроїв, цей досвід теж вдалось застосувати в новому проєкті. Окрім досвіду я зробив для себе багато нових відкриттів, які стали в пригоді у майбутньому. Думки про повернення до Node.js зникли.
Перехід в Yalantis: поточний проєкт, моя діяльність
В компанію я прийшов навесні
Чим мені подобається Rust
Rust вирішив мій особистий біль — це tooling. Це утиліти, з якими ти як розробник стикаєшся кожен день. Порівнюючи з Node.js, мені дуже часто доводилося змінювати версії та платформи, це створювало незручності через необхідність користування декількома утилітами. В Rust є стандартизований менеджер версій, і це перша річ, яку встановлює розробник. Відсутність єдиного загальновизнаного рішення для написання та генерації документації в Node.js теж викликає труднощі. Згенерована документація проєктів відрізняється: як візуально, так і по функціоналу. Аналогічна ситуація із лінтером та утилітою для форматування коду. В Node.js це були сторонні рішення, у Rust — загальноприйняті, що є частиною тулчейну.
Тепер про компілятор. Робота з компілятором у Rust приносить мені значно більше задоволення, порівнюючи із досвідом Node.js. Повідомлення та запропоновані варіанти розв’язання проблем від компілятора Rust, в більшості випадків, допомагають усунути проблему швидше. Для мене комфорт розробки був ще одним вирішальним фактором у виборі Rust як наступної технології. На мою думку, краще витратити більше часу на етапі розробки у боротьбі із компілятором, ніж витратити більше часу на діагностику проблеми у майбутньому. Звичайно, порозумітись із компілятором вдалось не відразу, але із накопиченням досвіду компілятор стає твоїм кращим другом, з яким ви займаєтесь парним програмуванням.
Відзначу крутий pattern matching, макроси та ком’юніті. Якщо порівнювати макроси у Rust з іншими мовами, то такої потужної системи я ще не зустрічав. Щодо спільноти, то растове ком’юніті дуже дружнє — там завжди готові допомогти початківцю. Перехід на Rust важкий і продукує багато питань, але люди зі всього світу охоче відповідають навіть на найдурніші питання і це приваблює. У Rust є кодекс поведінки, що дотримується командою модераторів, тому офіційні портали й більшість неофіційних сприяють приємному спілкуванню. Community дбає про мову, але це винятково мої відчуття.
Для чого я використовував Rust
Серед напрямків, з якими я мав справу:
Web development. Цей напрямок використання мови швидко розвивається. Вже зараз Rust може запропонувати чималу кількість фреймворків та крейтів на різну тематику.
Зростання присутності WebAssembly у браузері є великим плюсом для Rust, адже відкривається ще одна ніша для застосування мови. Швидкодія WASM є перевагою для використання у складних додатках. Наприклад, графічних, як Figma. Також WASM дає можливість не перейматись обфускацією коду, портувати чинні проєкти, написані на інших мовах, писати фронт та бекенд, використовуючи одну мову програмування.
Більше інформації про можливості веброзробки з використанням Rust можна дізнатись: тут, у книзі з WASM та на головній сторінці.
Gamedev & Graphics. Rust чудово підходить для розробки графіки та ігор під web, мобільні девайси та десктоп. Екосистема ще молода, але постійно розвивається. Зараз можна знайти достатньо засобів для початку експериментів. Говорячи про проєкти пов’язані із графікою, я б відзначив:
- github.com/gfx-rs/wgpu
- github.com/GraphiteEditor/Graphite
- github.com/grovesNL/glow
- github.com/asny/three-d
- github.com/BVE-Reborn/rend3
- github.com/plotters-rs/plotters
Що стосується геймдеву, то мені на думку спадають такі проєкти:
- veloren.net
- bevyengine.org
- github.com/not-fl3/macroquad
- github.com/FyroxEngine/Fyrox
- github.com/PistonDevelopers/piston
Детальніше про проєкти та екосистему можна дізнатись тут.
Розробка розширень для використання в інших мовах програмування. Окрім можливостей розробки додатків для інших мов, хочу сказати декілька слів про розробку бібліотек для мобільних платформ. Mozilla дуже активно використовує Rust не тільки для переписання критичних частин. У них вона застосовується і в мобільних додатках. Mozilla розробляє uniffi — рішення для генерації байндінгів для бібліотек, написаних на Rust під інші мови програмування, зокрема Kotlin та Swift, що використовуються в Android та IOS проєктах. Uniffi активно застосовується в наступних проєктах:
Розробка CLI застосунків та скриптинг. Rust чудово підходить для розробки CLI застосунків. Для цього в екосистемі є чимала кількість крейтів. Підтвердженням цьому є велика кількість опублікованих утиліт та розширень cargo. Серед проєктів які я використовую, особисто можу відзначити:
- github.com/sagiegurari/cargo-make
- github.com/extrawurst/gitui
- github.com/cross-rs/cross
- github.com/bbqsrc/cargo-ndk
Що стосується скриптингу, то особливо корисними для мене є:
Компанії, які вже використовують Rust
Мову Rust вже використовують відомі гравці на ринку технологій: Atlassian, Evo Company, Coursera, Cryptape. У 2021 році Facebook приєднався до Rust Foundation. Файловий та хмарний хостинг Dropbox теж активно використовує мову у серверній частині, що відповідає за синхронізацію. Twitter використовує Rust для високонавантаженої частини сервісу. 2022 може нарешті стати роком для Rust всередині ядра Linux версії 6.1. Таку інформацію повідомив автор ядра Linux і координатор його розробки Лінус Торвальдс на Kernel Maintainers Summit.
Rust є сприятливим варіантом для великих розподілених мереж із великою кількістю підключених пристроїв, що потребують агрегування та обробки великих обсягів даних. Таким чином виробники пристроїв інтернету речей й виробники медичного обладнання можуть отримати особливу користь від впровадження Rust. У 2019 році компанія 42 Technology анонсувала свої перші однокристальні пристрої IoT, створені в Rust. Ця мова є універсальною та підходить для всіх рівнів підключення IoT: хмарних, периферійних та IoT девайсів.
За допомогою бібліотек на основі Rust можна створювати масштабовані та швидкі програми. Наприклад, перспективним є біотехнологічний стартап Imeka, що використовує Rust для створення бібліотеки, що утворює високопродуктивні алгоритми медичної візуалізації з високою роздільною здатністю на своїй платформі візуалізації мозку. Сюди ж можна додати й розробку високопродуктивних інструментів розробки й тулінгу. Консалтингова компанія Stratum Security, що займається інформаційною безпекою, використовує Rust для проведення тестування витоку даних, щоб забезпечити кращу безпеку програм для своїх клієнтів. JetBrains також пропонує зручний інструмент тестування та налаштування в Rust.
Багато глобальних компаній, таких як Braintree, Postmates і Snapview, використовують Rust для побудови бекенду своїх вебслужб. Rust підходить для оптимізації будь-якої клієнт-серверної архітектури. Snapview, німецька цифрова комунікаційна компанія, використовує Rust, щоб розширити можливості свого сервера для надання високоякісних і високопродуктивних послуг відеоконференцій. Отже, Rust — це мова загального призначення для розробки ефективного та продуктивного програмного забезпечення, що легко масштабується та підтримується.
Ситуація на ринку, складність знайти проєкт і розробника
Якщо ми подивимося на популярні мови програмування, то практично за кожною з них стоїть велика корпорація. Новачку важко пробитися в таку тісну компанію. Але Rust поступово завойовує своє місце. Можливо, це погано видно через аутстаф-орієнтований ринок розробників України. Зараз Rust цілком готовий для широкого та масштабного використання. Попит на мову програмування Rust становить 2,4% у світовому масштабі порівняно з іншими мовами. Проте 5,18% опитаних розробників сказали, що знають мову. Пропозиція Rust розробників перевищує попит на них. Вважаю, що в цьому випадку не ринок переконує розробників, які мови вивчати, а скоріше розробники почнуть переконувати ринок, яких спеціалістів шукати. І в цьому випадку Rust справді змінює правила гри. Згідно з опитуванням Stackoverflow за 2022 рік, Rust входить до 10 найбільш високооплачуваних мов програмування у світі.
Мої міркування, чому хмарний сервіс AWS перейшов на Rust? Справа в зацікавлених у цій мові людях. У них є дуже крутий чувак Jon Gjengset, залишу посилання на його Youtube канал. Маючи такого крутого фахівця, дійсно можна перейти на іншу технологію. Rust розвиває специфічний стиль мислення, після якого ти вже не будеш таким, як раніше.
Щоби переконати керівництво для переходу на іншу технологію, треба показати конкретні цифри, в чому буде lifetime value. Компанії треба інвестувати в це гроші, потрібні аргументи для такого переходу. Нам пощастило, ініціатором розробки на Rust був сам клієнт. Це дуже круто, що в українському просторі з’являються клієнти з таким бажанням. Важливу роль грає й Community. Якщо ми будемо активно розвивати цю частину — більше розробників та потенційних клієнтів звернуть увагу на Rust. Ринок лімітований — складно знайти або проєкт, або розробника високої експертизи, якщо такий проєкт з’являється.
Отже, коли ти маєш достатньо досвіду, в тебе не виникає бажання шукати нові штуки, ти просто пишеш код. У випадку з Rust, ти постійно шукаєш нові крейти, відкриття, які можна принести у свій проєкт.
Я рекомендую подивитися у бік Rust розробникам, які все більше незадоволені інфраструктурою та екосистемою теперішньої мови програмування. Якщо ви просто втомилися від спірних і нелогічних речей, як це було зі мною, поступово переглядайте вакансії, ходіть на співбесіди, дізнавайтеся, що запитують і визначайте свої слабкі сторони. Практикуйтесь на pet-проєктах. У цій сфері немає упереджень на ринку, можуть взяти як джуна, так і досвідченого світчера.
40 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів