- rust
- What talking about programming languages in 2022 feels like
- Newsletter
- Good luck enforcing your bullshit
- Greenest programming languages: a reason to support JavaScript over TypeScript
- Are you interested in our lord and savior, Rust & Vim ?
- If the elements in rocks have a code, and the Earth crust is mostly oxides, does it mean that rocks run on Rust?
- Goddamnit
- Rust devs footprints
- Jesse we need to code
- This popped up on my chrome discover feed
- Let’s see if they sanitise their data
- «Rust – не Си на стероидах. Чтобы его изучить, нужно избавиться от предрассудков»
rust
What talking about programming languages in 2022 feels like
Newsletter
Good luck enforcing your bullshit
Greenest programming languages: a reason to support JavaScript over TypeScript
Are you interested in our lord and savior, Rust & Vim ?
If the elements in rocks have a code, and the Earth crust is mostly oxides, does it mean that rocks run on Rust?
Goddamnit
Rust devs footprints
Jesse we need to code
This popped up on my chrome discover feed
Let’s see if they sanitise their data
«Rust – не Си на стероидах. Чтобы его изучить, нужно избавиться от предрассудков»
В отличие от нашего прошлого героя, Михаил сделал выбор не в пользу 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 для наших читателей?
— Да, вот список основных, которыми я сам пользовался: