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

Илья, привет. Расскажи, пожалуйста о себе: где ты работаешь, кем и какое отношение имеешь к Rust?

Меня зовут Илья Лахин, я программист из новосибирского Академгородка. Более 12 лет занимаюсь веб-разработкой. Rust мне нужен для работы над своими проектами, работаю с ним года три, до этого писал на Scala. У меня есть большой интерес к GameDev — к разработке компьютерных игр и, в особенности, компьютерной графики для них. Еще я веду веду еженедельные встречи разработчиков компьютерной графики на языке Rust для русскоговорящих ребят (на YouTube можно посмотреть записи, их там уже 71). Еще я мейнтейню известный проект Vulkano, немножко контрибьючу в разные Open Source проекты и, конечно, много занимаюсь своими собственными проектами.

Как ты пришел в Rust? 

Три года назад я задумал сделать компьютерную игру с самого начала и стал подбирать язык, который хотел бы освоить для этой цели. Смотрел разные варианты, Rust показался мне интересным и перспективным. Я решил его освоить и с тех пор использую его как свой инструмент. Правда, игру так до сих пор и не сделал, как это часто бывает)

Чем именно он тебя заинтересовал?

С одной стороны, это язык для системного программирования. С другой — он очень современный. Если посмотреть на его синтаксис и семантику, то можно увидеть, что его создавали действительно сильные разработчики с широким и глубоким опытом в разных областях программирования. Я могу об этом говорить, так как другим моим большим интересом является разработка языков программирования. 

Думаю, что за Rust будущее, это язык, который со временем если не вытеснит, то займет значительную часть того, что пишется на C++. Если вы выбираете язык системного программирования, а я считаю, что для основательного GameDev нужно выбирать именно такие, то Rust— очевидный выбор. 

Расскажи пожалуйста, сколько у тебя времени вообще заняло изучение языка? 

Где-то за пару недель прочитал растбук, через месяц-два уже мог более-менее программировать. Конечно, какие-то аспекты пришлось осваивать очень долго. Вообще изучение языка и его экосистемы происходит непрерывно. Можно сказать, я его до сих пор учу.

Rust в GameDev — это сейчас скорее исключение или тенденция? 

Это точно не мейнстримная часть GameDev. Движки для массового GameDev обычно никак с Rust не связаны. Это Unity на C#, Unreal на C++. Некая взаимосвязь с Rust есть у Godot. Но в целом Rust, конечно, стоит особняком. 

В чем тогда выгода перехода на него для компаний? 

Rust позиционирует себя как язык для написания достаточно безопасного программного обеспечения. Он хорошо проверяет все, что пишет программист. Если появятся крупные массовые движки, то скорее всего в плане разработки будут определенные выигрыши — например, в скорости. Сейчас этого не происходит, потому что rust-программистов в принципе не так много. Но думаю, это вопрос времени.

А есть преимущества языка для GameDev в целом? 

Есть достаточно популярные игры, которые не пишутся мейнстримными инструментами. Например, Factorio, где требуется очень сложная симуляция, была написана просто с нуля на C++ достаточно сильными программистами. Если вы хотите создавать такого рода игры (я, например, хочу), то нужно выбирать хорошие инструменты системного программирования. 

Что такое системное программирование? Это когда вы хорошо контролируете ресурсы компьютера. Когда вы хорошо контролируете ресурсы компьютера, вы можете делать все очень оптимизировано. Такие сложные игровые симуляции практически невозможно создавать с помощью мейнстримных движков. Они не предназначены для изобретательства. Для этих целей нужен системный язык программирования. И в этом смысле стоит посмотреть в сторону Rust . 

А какие ты видишь минусы Rust для GameDev? Ну, кроме сложного входа, маленького количества разработчиков и нехватки инструментов. 

Экосистема Rust в плане разработки игр за последние три года все-таки продвинулась.  Некоторый набор инструментов, движки в общем-то существуют. Но того уровня стандартизированных простых инструментов, которые предоставляет любой мейнстримный движок, Rust еще не достиг. Хотя активно к этому движется. Когда вы пишете какую-нибудь игру на Rust, постоянно приходится что-нибудь изобретать и дорабатывать. Есть дефицит средств инструментов разработки: библиотек, редакторов. Всего того, что условно относится к инфраструктуре. 

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

А есть уже готовые игры на Rust

В основном, это инди-проекты, а вот о больших коммерческих я особо не слышал. Профессионально заниматься разработкой игр на Rust пытается компания Embark Studios. Еще можно вспомнить Veloren — игру типа Minecraft. Пожалуй, это самый масштабный проект, в который сейчас играет много людей. 

Зависит ли вероятность использования Rust от жанра игры? 

На нем пытаются делать разные игры. Но мое личное мнение, что он оптимален для создания стратегических игр. Не в последнюю очередь потому, что в обычном GameDev вообще нет общих техник для разработки стратегий. Это всегда определенное изобретательство. И Rust как язык для изобретательства стратегических игр неплохо бы подошел.

В сравнении с прошлым годом Rust стали больше интересоваться, он несколько лет подряд признается самым любимым языком программистов. Как думаешь, есть ли тенденция к массовому изучению Rust? Завоюет ли он мир? 

Безусловно, популярность Rust растет (в основном, за счет блокчейна). Но в общем не так принципиально, благодаря каким именно технологиям язык привлекает внимание. Так или иначе все больше программистов его выучивают, все больше людей просматривают в сторону того, чтобы его изучить. 

Давай предположим, что я — студент, который хочет войти в GameDev. С изучения какого языка мне начать, чтобы потом было проще перейти на Rust? Может быть, есть ли смысл сначала изучить, например, C++? 

Мне кажется, изучать C++ для последующего перехода на Rust — это не очень хорошая идея. К тому же сейчас в принципе есть тенденция не рекомендовать C++ для изучения. Да, он активно развивается и широко используется, но у него огромное количество всевозможных Legacy еще из восьмидесятых. Чтобы достичь мастерства, придется изучить много того, что отмирает и, скорее всего не пригодится. Это очень спорная инвестиция своих сил и времени.

Честно говоря, я бы не стал изучать Rust, чтобы зарабатывать им в GameDev. Но есть другие области, в которых Rust отлично монетизируется (тот же блокчейн). Лучше посмотреть на них, а заодно писать игры — в порядке творчества. 

Может ли Rust быть первым языком для изучения?

У меня нет такого опыта. Перед тем как заняться его изучением, я уже знал несколько языков, можно сказать, в совершенстве. Вообще бывают ребята, которые изучают Rust практически как первый язык, но такое встречается не часто. Скажем, это язык не для джуниоров. 

А дай совет тем, кто хочет выучить на Rust и не сойти с ума в процессе? 

Если советовать в общем, то:

  1. Начинайте с простых вещей, постепенно осваивайте более сложные конструкции языка. Например, с макросов начинать не стоит.

  2. Работайте над каким-нибудь своим творческим проектом, пишите и переписывайте, осваивая за счет этого новые концепции. 

  3. Начните контрибьютить в опенсорс-проекты, это тоже очень помогает. 

Можешь посоветовать почитать что-нибудь кроме Rust Book?

Честно говоря, читать Rust Book — это действительно хороший совет. Он очень хорошо написан, не у каждого языка есть такое хорошее руководство. Точно имеет смысл активно общаться с сообществом, оно очень дружелюбно. Есть русскоязычные чаты в Telegram, например, наше сообщество Rust GameDev, где можно и нужно задавать вопросы. Также стоит посмотреть на англоязычные чаты и ресурсы, в первую очередь каналы Discord. Там дают очень практичные практические обстоятельные ответы на любые вопросы любого уровня. Есть форум Rust Users. Можно на Reddit задавать свои вопросы.

Вообще читать, смотреть чужой код, сравнивать со своим. Самое главное — получать удовольствие от программирования, любить те инструменты, на которых вы работаете. Обычно программисты, которые пишут на Rust, очень любят этот язык. Именно это их мотивирует.

Второго декабря Илья выступит на конференции RustCon, где будет говорить об инкрементальных парсерах, архитектуре front-end компилятора, совместимого с IDE; создании собственных языков программирования и редакторов кода на Rust.

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


  1. GavriKos
    25.11.2022 13:46
    +4

    Какая интересно связь между ЯП и жанром игры? Алгоритмы то одинаковые, а язык - просто инструмент. Ладно бы если бы сравнивались языки разные по парадигмам...


    1. dream_designer
      25.11.2022 22:06
      +2

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


  1. fancy-apps
    25.11.2022 23:34

    Не подхватил GameDev Rust, не собирается и вряд ли в будущем соберется, потому что ООП, да в Rust-е это все можно сделать по Rust-овски, но зачем?


    1. AnthonyMikh
      26.11.2022 07:32
      +3

      А можете объяснить, почему для разработки видеоигр обязательно ООП?


      1. fancy-apps
        27.11.2022 07:52

        Нет не обязательно. Дело в том что 30 лет пишут игры на плюсах с ООП, кучу движков написали, экосистема... Да это все можно на rust переписать, но зачем?


  1. DSRussell
    26.11.2022 01:04

    Carbon еще есть