Как стать автором
Обновить
60.72
Криптонит
Разрабатываем. Поддерживаем науку. Просвещаем

«Rust – не Си на стероидах. Чтобы его изучить, нужно избавиться от предрассудков»

Время на прочтение7 мин
Количество просмотров17K

В отличие от нашего прошлого героя, Михаил сделал выбор не в пользу Scala, а предпочел Rust, так как этот язык обеспечивает безопасное использование данных и ресурсов. На нём можно управлять памятью и создавать не только более быстрый, но и более надёжный код. Кстати, Михаил считает C++ не столько базовым языком для Rust, сколько консервативным конкурентом. По его словам, поклонники C/C++ недолюбливают Rust лишь потому, что имеют о нём много предрассудков и пока не осознали преимущества нового языка.

Мы поговорили с ведущим системным программистом департамента разработки компании «Криптонит» Михаилом Дорониным, чьей основной специализацией в компании является программирование на Rust.

— Михаил, как ты стал Rust-программистом?

— Всё началось с того, что я учился в Колледже космического машиностроения и технологий по специальности радиотехнических комплексов и систем управления космическими аппаратами. Сейчас, кажется, такой специальности больше нет. Есть просто радиотехника. Вот там какие-то основы программирования давали, но мне было не сильно интересно. На тот момент меня больше интересовало что-то, что можно руками потрогать, какой-то реальный радиоприемник сделать…

— Как тогда появилась тяга к программированию?

Уже потом я учился заочно, тоже на радиотехнику. Работал в конструкторском бюро, занимавшемся разработкой навигационного оборудования для авиационной техники. Там я всё больше уходил от схемотехники в программирование контроллеров и ПЛИС. В какой-то момент меня знакомые учёные позвали поработать программистом в лабораторию электронно-оптических систем. Она тоже до сих пор успешно работает. Они занимались в основном оптическими датчиками. Например, такими, которые в томографах используются. Там обычный микрофон нельзя поставить, поэтому применяют оптические микрофоны. Подобные вещи применяются в сфере безопасности для охраны периметра, в геологоразведке… Вот на этой работе я был занят прямо супер full stack.

— Что именно было нужно программировать?

— Сама система уже была написана, требовалось оптимизировать постобработку с Python на C++, разрабатывать веб-интерфейс для АРМ. Много с чем удалось поработать, было очень интересно. Наверное, это моё самое творчески интересное место работы, потому что компания относительно небольшая и в ней нет никакой бюрократии.

— Почему выбрал Rust?

— Это произошло позже. Потом я долгое время работал в разных компаниях на позиции бэкенд-разработчика на Java и Python, но мне Rust как язык стал больше нравиться. К тому же, я тогда немножко подустал от писания бизнес-логики и программирования высокого уровня. Начинал-то я карьеру с самого низкоуровневого. Потом какое-то время занимался Enterprise-разработкой и обработкой научных данных.

— Как давно ты в «Криптоните»?

— С октября 2019 года. И я сразу занялся программированием на Rust. Меня пригласил знакомый и сказал, что есть возможность попробовать Rust. Он предупредил, что будет непросто, что наверняка возникнут сложнее вопросы. В «Криптонит» я в принципе пришёл с понижением зарплаты, но на более интересные задачи и перспективы. Мы вначале договорились, что если буду соблюдать определённый план, то з/п повысят. Сейчас у меня и задачи интересные, и зарплата хорошая.

— Какие ты видишь преимущества Rust перед Scala?

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

— Чем ты занимаешься в «Криптоните»?

— Я работал над проектом Small files storage, а сейчас мы его активно тестируем. В какой-то момент мы всё-таки приняли решение не писать его с нуля, а допиливать готовые модули.

— Какой функционал у этого «хранилища малых файлов»?

Представьте, что у вас очень много маленьких файлов, и вы хотите иметь к ним быстрый доступ. Стандартные файловые системы для этого не подойдут. Наша система пишет всё в один большой файл и как бы бинарный BLOB дописывает в конец. Плюс отдельно хранятся метаданные. Конечно, в реальности всё сложнее, чем я сейчас говорю. Система распределенная, есть поиск по нескольким узлам, выполняется дедупликация и сжатие данных.

— Переход на SSD не снизил актуальность вашей разработки?

Смысл в ней всё равно остаётся, поскольку твёрдотельные диски всё ещё дороже обычных HDD. Когда у вас сотни терабайт данных, их слишком дорого хранить во флэш-памяти.

— Тебе как-то пригодился твой радиотехнический бэкграунд?

Да. Я когда пришёл, мы работали над одним проектом, в котором я занимался оптимизацией производительности, профилированием данных. Вот там мне пригодились мои навыки по цифровой фильтрации. У нас была задача передискретизации аудиоданных, и я увидел, что кое-что делается не совсем правильно, приводя к возникновению артефактов в спектре. Объяснил команде, как надо сделать. Потом ещё делал оптимизацию с векторными инструкциями. Использовал набор инструкций AVX, но без AVX-512, поскольку на рабочих машинах у нас тогда AVX-512 не поддерживался.

— CUDA-оптимизацию не пробовали?

Нет, хотя была такая идея. Просто мы не были уверены, что в конечном продукте однозначно будет графический ускоритель с поддержкой CUDA, а SSE2 есть везде, да и на процессоре мы всё успевали просчитать. Не стали усложнять систему.

— Как ты оцениваешь перспективы языка Rust? Можно ли с его помощью найти «профессию будущего»?

В основном сейчас пишут на C/C++, Java, Python… и Rust встречает активное сопротивление со стороны программистов старой школы. Очень много людей крайне превратно его понимают, не хотят изучать глубоко, и у них формируется предвзятое отношение. Типа, это «Си на стероидах». Конечно, это не так. В Rust есть уникальные механизмы, другая система типов, свои приятные «плюшки». Он становится популярнее год от года. Я вижу ситуацию так, что ниша Rust будет расширяться в сторону высоконагруженных распределённых систем, а также встраиваемых систем и драйверов Linux.

— Какие выгоды может принести Rust в коммерческих проектах?

— Для маленьких компаний эти выгоды могут быть неочевидными, а вот крупные смогут экономить сотни миллионов долларов ежегодно. Если они сейчас используют Java, а потом перепишут код на Rust, он, грубо говоря, станет в три раза быстрее и гораздо надежнее за счет более продвинутой системы типов. Поэтому можно прогнозировать, что в ближайшее время какие-то крупные проекты будут переписывать на Rust. Ниша Rust будет расти, простите за каламбур, а ниша Java – сужаться. Например, в Google уже внутренние тулзы для Android-разработки, драйверы и компоненты ядра пишут на Rust. Там ещё энергоэффективность всех процессов считают и борются за снижение выбросов углекислого газа.

— На твой взгляд, в чём причина неприятия Rust некоторыми программистами, освоившими мейнстримовые языки?

Есть такой мем, в котором птичка прямо активно что-то отвергает, а потом пробует, и ей нравится. На мой взгляд, с Rust такая же ерунда. Те, кто выступают против Rust, просто его не распробовали. Я ведь тоже при изучении Haskell возмущался и спрашивал себя, почему в этом языке всё так странно? Но это была первая стадия, для которой подобное восприятие типично. Вот до второй стадии — осознания и принятия — мало кто доходит. Это нужно определенный склад ума иметь и математический бэкграунд. Чтобы развиваться дальше, я прошёл много разных курсов по функциональному программированию, посещал соответствующие конференции… тогда и вошёл во вкус. Чтобы хорошо изучить Rust, нужно избавиться от предрассудков и попробовать привыкнуть к его особенностям.

— Насколько быстрым получается код на Rust?

— Он будет такой же быстрый, как и на С++, даже потенциально быстрее, потому что компилятор в Rust знает о твоём коде чуть больше, чем сишный компилятор. В частности, компилятор знает, что если у тебя есть мутабельная ссылка, то он не может пересекаться с другим. Компилятор в Rust предотвращает типичные ошибки, что повышает безопасность программ и позволяет заодно выполнять некоторые оптимизации при их написании. Также Rust лишён тяжёлого Legacy-наследия Cи, поэтому код на нём получается чище и легче.

— С чего стоит начать тем, кто всерьёз планирует осваивать Rust?

Rust приносит идеи из теории типов (аффинные типы) и с помощью них делает низкоуровневый код более безопасным. Соответственно, полезно иметь бэкграунд или теории типов и/или в низкоуровневом ПО: понимать, как работает память, ОС, процессор, указатели…  Если изучал высшую математику, хорошо знаешь алгебраические структуры, то лучше сразу начинать с Rust. Мне лично было относительно просто его учить ещё и потому, что к тому моменту я уже понимал, как работает процессор, как устроена память, что такое указатель…

— Насколько Rust популярен в других ИТ-компаниях?

— Вот не знаю, как сейчас — я ведь уже давно перестал мониторить вакансии. На момент перехода в «Криптонит» на российском рынке было очень мало предложений для программистов на Rust. Когда он появился в 2016 году, многие западные вузы переделали курсы по операционным системам сразу на Rust. Недавно видел доклад Microsoft, в котором представитель компании сказал, что у них около 70% багов происходит из-за небезопасной работы с памятью. Rust эффективно предотвращает такого рода ошибки, поэтому к нему сейчас большой интерес со стороны Microsoft, Amazon, Google и других западных компаний. Они вкладывают много ресурсов в его развитие и в поддержку сообщества специалистов.

— А в России такие же тенденции?

— Пока ещё нет. Когда-то давно я общался с ребятами из Яндекса, так они оказались достаточно консервативными. Когда услышали, что мне не очень интересно развиваться в C++, но с удовольствием помогу с переходом на Rust, они начали “объяснять”, что С++ лучший язык и никакой Rust не нужен. А спустя лет шесть у них вышел доклад от молодого сотрудника, который рассказывал о преимуществах Rust. Поэтому мне кажется, что в России переход на Rust —это очень вялотекущий процесс.

— Можешь дать несколько советов начинающим Rust-программистам? На чём чаще всего спотыкаются, и как преодолеть эти демотивирующие препятствия в изучении языка?

— При освоении Rust многие новички сталкиваются с моментом, который называется fight the borrow checker. Его надо преодолеть и дальше всё пойдет гораздо проще. Мне помогло понимание теории типов и осознание, что lifetimes — это (и технически, кажется, так оно и реализовано в компиляторе) параметр типа. Это помогло чисто формально прочитать, что именно мне говорит компилятор, где какие типы у него не совпадают и почему, а потом уже из этого сложить картинку: понять, в чём на самом деле тут проблема с точки зрения работы с памятью, и есть ли она вообще. Этот процесс похож на чтение математического доказательства. Сначала ты прослеживаешь чисто механически каждый шаг, и удостоверяешься, что он верный, и только потом через какое-то время приходит «инсайт» — понимание того, о чём это доказательство, и "почему это так".

— Посоветуешь пару-тройку ресурсов по Rust для наших читателей?

— Да, вот список основных, которыми я сам пользовался:


1. https://www.youtube.com/c/JonGjengset — PhD в MIT, делает много стримов про Rust как для новичков, так и для продвинутых. Он же превратил часть материалов в книгу https://rust-for-rustaceans.com/

2. https://doc.rust-lang.org/book/ — официальная книга для новичков по Rust

3. https://www.packtpub.com/product/rust-high-performance/9781788399487 — неплохая книга, которая в сжатой форме рассказывает об особенностях и лучших практиках языка. Подойдет продвинутым программистам, которые, например, уже знают С++.

4. https://doc.rust-lang.org/nomicon — про низкоуровневые подробности языка и о том, как писать безопасный "небезопасный код".

5. https://www.youtube.com/watch?v=IPmRDS0OSxM — в ролике за полтора часа рассказывается о главных особенностях Rust. Рекомендуется тем, кто знает C++.

6. https://www.youtube.com/watch?v=LjFM8vw3pbU — видео от Брайана Кэнтрилла про то, как он перешёл на Rust. Это очень известный программист из IBM, работавший над Solaris, пока последний не выкупила Oracle.

***

PS: мы ищем Rust-программистов: https://career.kryptonite.ru/vacancies/senior-rust-developer-rust-developer/

 

Теги:
Хабы:
Всего голосов 32: ↑24 и ↓8+16
Комментарии20

Публикации

Информация

Сайт
kryptonite.ru
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия