Какой язык программирования выбрать? Открываем серию статей об этом! Наши разработчики будут рассказывать об особенностях, применении, плюсах и минусах языков, которые используются в «Криптоните». Начинаем с Rust: опытом поделится Андрей Чесноков, ведущий системный программист.

1. Особенности

Ключевой особенностью Rust является автоматическое управление памятью без использования сборщика мусора.

Другими словами, разработчику не нужно думать, в какой момент освободить ранее выделенную память. Он просто может писать, сосредоточившись на бизнес-логике, а Rust возьмет эти задачи на себя.

Компилятор проверит, что программа не обращается к уже освобождённой памяти или не пытается освободить её дважды. Таким образом закрывается целый класс ошибок работы с памятью.

Это его killer feature — объединение производительности системных языков, таких как C или C++, и отсутствие необходимости вручную выделять и освобождать память.

2. Где используется

В настоящее время Rust достаточно популярен в области блокчейн-разработки и встраиваемых систем, а ещё он поддерживает фронт-энд разработку (с помощью WebAssembly).

Сейчас в нашей компании Rust применяется для разработки высоконагруженных и отказоустойчивых систем.

Например, мы разрабатываем сервис, задача которого — максимально производительное получение результатов работы модели машинного обучения, используемых для биометрической идентификации. Модель предоставляет наша лаборатория больших данных и статистики. А сам сервис, отвечающий за доставку обрабатываемых данных к GPU, и процедура получения результатов — они как раз пишутся на Rust.

Ещё есть фреймворк GStreamer, который позволяет создавать потоки обработки аудио- и видеоинформации с помощью подключаемых модулей. В «Криптоните» мы также разрабатываем такие модули с помощью Rust. Он упрощает разработку, помогая избежать типовых ошибок и ускорить обработку данных.

В результате сейчас приложение, собранное из этих модулей, способно детектировать факты нарушения техники безопасности. Например, оно находит на камерах людей без касок. Также приложение может быть адаптировано для решения целого спектра задач, сводящихся к обнаружению и распознаванию объектов в кадре.

3. Плюсы

  1. автоматическое управление памятью без использования сборщика мусора;

  2. проверка исходного кода;

  3. отличный синтаксис: используются дополнительные конструкции, которые призваны сократить объём кода, что сильно облегчает жизнь;

  4. элементы функционального, объектно-ориентированного и процедурного программирования, что позволяет писать программы так, как комфортно размышлять.

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. Ознакомиться с программой, докладами и зарегистрироваться на мероприятие можно по ссылке.

Комментарии (26)


  1. UMenyaNeudobnieVoprosiki
    06.02.2023 10:08
    -1

    Это самый лучший паскаль из всех что я видел


    1. domix32
      06.02.2023 11:37
      +3

      Я б не советовал его использовать его в качестве академической замены.


    1. gandjustas
      06.02.2023 14:47
      -2

      Самый лучший паскаль это python


      1. UMenyaNeudobnieVoprosiki
        06.02.2023 15:18
        -5

        Не корректно сравнивать повсеместно применяемую штуку и игрушки для фриков. Поэтому раст - это новый лучший паскаль. А паскаль - он как индеец. А хороший индеец...

        И вообще, сейчас модно непредвзятые вопросики спрашивать у всяких AI. А они, почему-то не очень спешат рекомендовать такие востребованные, сверхмощные и высокопрофессиональные штуки как раст и паскаль)


    1. Intuist
      08.02.2023 16:29
      +1

      -Как звали Паскаля?

      -Турбо?


  1. stackjava
    06.02.2023 10:27
    +3

    Остаться в одном языке, мало того, что неинтересно, так надо ещё и постараться сделать это. Сейчас это почти невозможно.

    Пока что можно с одним java оставаиться... много компаний, где еще kotlin примешивают, но он то же на jvm... Так что не в счет.


    1. domix32
      06.02.2023 11:40

      а как же xml driven development? или yaml конфиги для всего пайплайна сборки/тестирования? Ну и геймдев всякий.


      1. stackjava
        06.02.2023 14:31

        Yaml, xml, json, sql... Но в статье имеется ввиду именно языки программирования.


        1. domix32
          06.02.2023 20:31
          -2

          языки программирования

          где? написано "в одном языке" буквально с цитаты выше. Ну и у большинства названных языков из списка сама собой возникает тьюринг полнота, потому что надо. Или что вы за ЯП берёте?


          1. stackjava
            07.02.2023 07:28

            Зачем путать язык разметки и язык программирования?


            1. domix32
              07.02.2023 20:46
              -3

              Ещё раз

              Остаться в одном языке

              где вы видите ограничение, что это должен быть исключительно язык программирования?


              1. stackjava
                07.02.2023 21:14

                Намекаете на то, что автор имел ввиду невозможность остаться в одном языке разметки, или вообще речь шла о языках (иностранных в том числе)?

                А может стоит из контекста понять, что речь о языках программирования?


    1. tyukmaev_i
      06.02.2023 11:58

      На ABAP-е не то что интересно оставаться, так ещё и нужно постараться, чтобы перейти на другой язык


  1. gfsdgafd
    06.02.2023 11:58
    +2

    Чтобы понять, как он работает и не бороться с компилятором, требуется определённая подготовка. Для новичков это может быть сложно, но в будущих версиях Rust планируются изменения, которые сильно упростят работу.

    О каких изменениях вы тут пишете?


    1. kamaisha Автор
      06.02.2023 13:03
      +2

      Добрый день! Речь идет про проект Polonius, ссылка на проект: https://github.com/rust-lang/polonius


  1. PrinceKorwin
    06.02.2023 12:57
    +4

    Почему-то не упоминается про возможность написания на нем микросервисов в общем случае и в частном просто веб приложений.

    Это именно то, где я использую Rust и очень доволен.

    До этого писал на Java. Быстро, но когда сервисов за сотню, то затраты на железо становятся конскими. С Rust этой проблемы нет.


    1. gandjustas
      06.02.2023 14:48
      +2

      звучи так, как-будто микросервисы нельзя на любом языке написать


  1. gmtd
    06.02.2023 14:03
    +4

    Первым пояснением на вопрос "Какой язык программирования выбрать?" должно быть "для чего?"


    1. gandjustas
      06.02.2023 14:49
      +4

      Но мы же понимаем для чего такие статьи пишутся


  1. lebedec
    06.02.2023 14:50
    +3

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

    Думается мне, для тех кто вообще не имеет опыта программирования любой язык создаёт высокий порог входа. Будут там механизмы заимствования, сырые указатели или приколы с value и reference объектами — для новичка всё это одна головная боль.

    Компилятор Rust мало того что сразу говорит о проблеме, так в некоторых случаях буквально подсказывает какой код нужно написать чтобы заработало. Я думаю это гораздо проще для новичков, чем ловить непонятные проблемы в рантайме.

    А вот для опытных разработчиков Rust действительно сложен. Борьба с компилятором постепенно сменяется осознанием отвественности за владение тем или иным объектом, начинаешь учиться программированию заново, вспоминаешь зачем нужно проектирование, архитектура приложения и т.д.


    1. gandjustas
      06.02.2023 14:57
      +2

      Конечно это не так. Удовлетворение всех хотелок компилятора раст это отдельный навык, которому нужно долго обучаться.

      Для сравнения попробуйте написать линейный односвязный список и стек на его базе на Раст и Python например. Второе окажется на порядок проще и быстрее.

      Рас хорош как второй или даже третий язык, если есть опыт работы со статической типизацией, обобщениями и интерфейсами.


  1. Pastoral
    06.02.2023 17:32

    “Ключевой особенностью Rust является автоматическое управление памятью без использования сборщика мусора.“ - Во первых, с каких это пор принадлежность к одной из двух половин - особенность? Во вторых, хорошо так память автоматически управляется - даже отдельный раздел книги, Reference Cycles Can Leak Memory, по этому поводу есть.

    Rust - сознательное решение обжегшись на молоке с максимальным энтузиазмом дуть на воду. Концепция времени жизни которую нужно прописать явно, уродливо, бессмысленно - пример «сообразить не удалось, но язык я всё равно сделаю».

    Из встреченных в Сети мнений, здравыми считаю два. На данный момент Rust переоценён. Сила Rust - в Cargo.


    1. Gargoni
      08.02.2023 18:58

      А ещё сила Rust в том что

      1. Перенос по умолчанию

      2. Структура данных на компиляторе

      3. Работа со строками

      4. Отсутствие огромного наследия совместимости.

      5. Да и много того что в ругих языках не сделали по причине слабых компиляторов, а потом менять не стали.


    1. Kuraudo
      09.02.2023 10:07

      Во первых, с каких это пор принадлежность к одной из двух половин - особенность?

      К обеим половинам с некоторыми оговорками.

      Во вторых, хорошо так память автоматически управляется - даже отдельный раздел книги, Reference Cycles Can Leak Memory, по этому поводу есть.

      Что в этом плохого? Там описан юзкейс достижения memory leak, если программировать и думать в концепциях привычных языков. Когда не задумываешься как под капотом работают зацикленные ссылки на объекты на js например. Rust предоставляет WeakRef для таких кейсов.

      Времена жизни это инструмент валидации ссылок в компайл-тайм, который например не позволит получить висячий указатель.


  1. qw1
    06.02.2023 19:48
    +1

    Другими словами, разработчику не нужно думать, в какой момент освободить ранее выделенную память
    Я думал, всё наоборот: в Расте разработчику нужно прежде всего думать, в какой момент объект должен умереть, чтобы принять правильные решения, кто им владеет, а кому можно дать попользоваться.


  1. beeptec
    07.02.2023 13:03
    -1

    Почему пчела, залетевшая в распахнутую форточку далее долго бьется о стекло рядом с этой форточкой и не понимает, как попасть на свободу?
    К чему я все это? К тому что одного желания выучить какой-то язык, чтоб потом на каком то этапе постижения истины в попытатках выпилить напильником из паровоза самолет, осознать что не взлетит, уходят года и понимание что язык, как инструмент в свете карьерного направления или безнадежно ограничен и затратен по времени и ресурсам или не достаточно интегрирован в соседние религии.
    Странно что здесь в обсуждениях никто не построил алгоритм поведения пчелы, с минимальными мыслительными инстинктами выживания. Именно так выглядит новичок с непомерным желанием и амбиции вырваться на свободу с видимым горизонтом.
    Публикация задалась бы, если бы автор именно так выстроил тактику статьи больше исследовательского характера, нежели скрытого завлечения на курсы.
    Но даже если и неосознанно предположить что таки да, этот молодой язык более перспективен по сравнению с другими, распространенными, с которого клиент ни за какие пряники не соскочит из страха что это НЛО и где оно аукнется каким боком и т.д. и т.п.
    Проблема всех новых языков (их платформ и парадигмы) в агрессии со стороны того, к чему основная масса привыкла и обучена. В каждом таком начинании без талантливого IT евангелиста, способного быстро сформировать свой приход и экспансию в иные храмы, это битье пчелы о стекло с рядом распахнутой форточкой.