Какой язык программирования выбрать? Открываем серию статей об этом! Наши разработчики будут рассказывать об особенностях, применении, плюсах и минусах языков, которые используются в «Криптоните». Начинаем с Rust: опытом поделится Андрей Чесноков, ведущий системный программист.
1. Особенности
Ключевой особенностью Rust является автоматическое управление памятью без использования сборщика мусора.
Другими словами, разработчику не нужно думать, в какой момент освободить ранее выделенную память. Он просто может писать, сосредоточившись на бизнес-логике, а Rust возьмет эти задачи на себя.
Компилятор проверит, что программа не обращается к уже освобождённой памяти или не пытается освободить её дважды. Таким образом закрывается целый класс ошибок работы с памятью.
Это его killer feature — объединение производительности системных языков, таких как C или C++, и отсутствие необходимости вручную выделять и освобождать память.
2. Где используется
В настоящее время Rust достаточно популярен в области блокчейн-разработки и встраиваемых систем, а ещё он поддерживает фронт-энд разработку (с помощью WebAssembly).
Сейчас в нашей компании Rust применяется для разработки высоконагруженных и отказоустойчивых систем.
Например, мы разрабатываем сервис, задача которого — максимально производительное получение результатов работы модели машинного обучения, используемых для биометрической идентификации. Модель предоставляет наша лаборатория больших данных и статистики. А сам сервис, отвечающий за доставку обрабатываемых данных к GPU, и процедура получения результатов — они как раз пишутся на Rust.
Ещё есть фреймворк GStreamer, который позволяет создавать потоки обработки аудио- и видеоинформации с помощью подключаемых модулей. В «Криптоните» мы также разрабатываем такие модули с помощью Rust. Он упрощает разработку, помогая избежать типовых ошибок и ускорить обработку данных.
В результате сейчас приложение, собранное из этих модулей, способно детектировать факты нарушения техники безопасности. Например, оно находит на камерах людей без касок. Также приложение может быть адаптировано для решения целого спектра задач, сводящихся к обнаружению и распознаванию объектов в кадре.
3. Плюсы
автоматическое управление памятью без использования сборщика мусора;
проверка исходного кода;
отличный синтаксис: используются дополнительные конструкции, которые призваны сократить объём кода, что сильно облегчает жизнь;
элементы функционального, объектно-ориентированного и процедурного программирования, что позволяет писать программы так, как комфортно размышлять.
4. Минусы
Высокий порог входа, особенно для тех, кто вообще не имеет опыта в программировании.
Дело в том, что в Rust используется сущность «время жизни» (lifetime) – своего рода подсказка компилятору, чтобы он мог гарантировать, что ссылки будут действительными. Ей оперирует borrow checker – это определённый механизм, который выполняется на этапе компиляции и определяет возможность доступа к памяти/данным. Если на этапе проверки выясняется, что данные вышли из области видимости, то выдаётся ошибка о невозможности работы с ними.
Чтобы понять, как он работает и не бороться с компилятором, требуется определённая подготовка. Для новичков это может быть сложно, но в будущих версиях Rust планируются изменения, которые сильно упростят работу.
5. Комьюнити и библиотеки
Rust-комьюнити очень дружелюбное, благодаря или вопреки сложности языка. Начать поиск ответов на вопросы рекомендую с площадки RustyCrate. Также есть телеграмм-канал Rust — русскоговорящее сообщество, встречи в оффлайн – Московский Rust-митап, и оригинальное англоязычное сообщество – https://www.rust-lang.org/ru/community.
У Rust стандартная библиотека достаточно компактная, например, по сравнению с Java. Для тех, кому её возможностей недостаточно, есть https://crates.io/ – публичный реестр с открытым исходным кодом, где каждый независимый разработчик может опубликовать свой код или библиотеку.
6. Обучение и pet-проекты
Для самостоятельного обучения есть путь, пройденный большинством разработчиков:
Это базис, после которого можно читать и понимать публикации, посвящённые конкретной теме. Главная сложность языка заключена в сущности «время жизни» и в понимании, как работает механизм контроля заимствований. В остальном же язык не сложнее, например, C++, а что касается написания приложений, то во многом и проще.
Вариантов для создания pet-проекта на Rust много. Всё зависит он интереса к той или иной области.
Rust – язык широкого назначения, можно даже сказать — универсальный. Например, он позволит попробовать свои силы в embedded-разработке и написать что-то полезное для Arduino, или же заняться фронтенд-разработкой и написать desktop-приложение с использованием Electron.
7. Карьера
Карьера Rust-разработчика мало чем отличается от карьеры разработчика на других языках. В большинстве случаев знание одного языка недостаточно для работы в любой компании. Например, Python требуется для работы с инфраструктурой, C/C++ для взаимодействия с существующими библиотеками и т.д.
Поэтому совет: не бойтесь учиться и изучать что-то новое. Смотрите, какие другие языки есть вокруг, и какие у них преимущества. Есть моно-компании, которые используют один язык и знание других не требуется, но это исключительные ситуации. Не получится изолироваться от других языков. В современных реалиях это даже не вопрос карьеры. Это вопрос о том, кто такой разработчик и что он должен знать. Остаться в одном языке, мало того, что неинтересно, так надо ещё и постараться сделать это. Сейчас это почти невозможно.
Кстати, 11 февраля пройдёт Rust Community Meetup в нашем офисе в СПб. К митапу можно будет присоединиться и online — трансляция будет на YouTube. Ознакомиться с программой, докладами и зарегистрироваться на мероприятие можно по ссылке.