Что такое rrc rust run

Обновлено: 28.06.2024

В статье будет показано как создать gRPC сервер и клиент на Rust. Для большей наглядности клиент будет также Telegram ботом. В итоге будет получена следующая архитектура:


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

Доменная модель включает данные о планетах Солнечной системы и их спутниках.

Поддержка редактора

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

Для отладки Rust-кода мне, следуя этому руководству, понадобилось установить расширение CodeLLDB.

Курс юного строителя

Чего не стоит делать в Rust, если начали играть в 2021 году

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

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

Имплементация

Существует несколько реализаций gRPC на Rust. В этом проекте был использован tonic .

Проект включает следующие модули:

Последний модуль содержит определение gRPC сервиса и отвечает за генерацию gRPC кода необходимого и для сервера, и для клиента.

Потребление памяти

Для анализа потребления памяти разными версиями моего инструмента командной строки я воспользовался следующей командой:


Команда time -v выводит много интересных сведений, но меня интересовал показатель процесса Maximum resident set size , который представляет собой пиковый объём физической памяти, выделенной программе в процессе её выполнения.

Вот код, который я применил для сбора данных о потреблении памяти разными версиями программы:


Вот результаты для Go-версии:


Вот — сведения о потреблении памяти Rust-версией программы:


Эта память выделяется в ходе решения следующих задач:

В Go есть сборщик мусора, который используется для обнаружения неиспользуемой памяти и её освобождения. Программист, в итоге, на эти задачи не отвлекается. Так как в основе сборщика мусора лежат эвристические алгоритмы, его использование всегда означает необходимость идти на компромиссы. Обычно — между производительностью и объёмом памяти, используемой приложением.

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

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

Время компиляции

Go — это язык, который был создан с учётом того, чтобы код, написанный на нём, компилировался бы как можно быстрее. Изучим этот вопрос:


Впечатляет. Посмотрим теперь на то, что нам покажет Rust:


Здесь выполняется компиляция всех зависимостей, а это 214 модулей. При повторном запуске компиляции всё уже подготовлено, поэтому данная задача выполняется практически мгновенно:


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

На выполнение release-сборки проекта уходит больше времени, что вполне ожидаемо, так как компилятор при этом выполняет оптимизацию кода:

Почему я решил использовать именно Go и Rust?

Есть много языков, на которых можно писать инструменты командной строки.

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

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

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

Тут мне бы хотелось упомянуть языки Crystal и Nim. Они выглядят многообещающе. Я с нетерпением жду возможности испытать их в очередном своём проекте.

Запуск и тестирование

Вы можете запустить проект локально двумя способами:

  • используя Docker Compose ( docker-compose.yml ):
    docker-compose up
  • без Docker
    Запустите gRPC сервер и клиент с помощью cargo run

Запросы к серверу можно выполнять используя какой-либо gRPC клиент (например, BloomRPC):


или делать это косвенно с помощью Telegram бота:

Соответствие между командами бота и RPC следующее:

  • /list → GetPlanetsList
  • /planets → GetPlanets
  • /planet → GetPlanet

Для тестирования приложения с помощью бота вам нужен Telegram аккаунт и собственный бот (введение в эту тему здесь). В зависимости от выбранного способа запуска, токен бота должен быть указан здесь или здесь.

CI/CD сконфигурировано с использованием GitHub Actions (workflow), который собирает Docker образы gRPC сервера и клиента (то есть Telegram бота) и разворачивает их на Google Cloud Platform.

Бота можно протестировать здесь.

Причины, по которым я выбрал бы Rust

Вот причины, которые могут привести к тому, что я выберу для некоего проекта Rust:

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

Поставьте себе домофон

Чего не стоит делать в Rust, если начали играть в 2021 году

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

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

Общие замечания

У Go и Rust есть некоторые особенности, которые до сих пор не дают мне покоя. Речь идёт о следующем:

  • Go так сильно нацелен на простоту, что иногда это стремление даёт противоположный эффект (например, как в случаях с GOROOT и GOPATH ).
  • Я всё ещё толком не пойму концепцию «времени жизни» в Rust. Меня выводят из равновесия даже попытки поработать с соответствующими механизмами языка.

Могу сказать, что и Go и Rust — это языки, которые было очень интересно изучать. Я считаю их отличными дополнениями к возможностям мира C/C++-программирования. Они позволяют создавать приложения самой разной направленности. Например — веб-сервисы и даже, благодаря WebAssembly, клиентские веб-приложения.

Не используйте факел

Чего не стоит делать в Rust, если начали играть в 2021 году

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

Дело в том, что свет от факела моментально привлечет к вам внимание других игроков. Часть из них будет гриферами, которые быстро прибегут на ваш «сигнал» и просто убьют. На этом ваш многообещающий забег в Rust просто закончится и придется начинать все сначала. Первое время лучше бегайте без факела и пытайтесь ориентироваться на карте с помощью своего зрения.

Заключение

В статье я показал как создать gRPC сервер и клиент на Rust и привёл пример использования клиента как источника данных для Telegram бота. Не стесняйтесь написать мне, если нашли какие-либо ошибки в статье или исходном коде. Спасибо за внимание!

Непрерывная интеграция

Те особенности компиляции проектов, написанных на Go и на Rust, которые мы выявили выше, проявляются, что вполне ожидаемо, в системе непрерывной интеграции.


Обработка Go-проекта


Обработка Rust-проекта

Библиотеки

Если говорить о Go, то мне удалось найти несколько библиотек, вроде machinebox/graphql и shurcooL/graphql. Вторая из них использует структуры для маршалинга и анмаршалинга данных. Поэтому я выбрал именно её.

Я использовал форк shurcooL/graphql, так как мне нужно было настраивать на клиенте заголовок Authorization . Изменения представлены этим PR.

Вот пример вызова мутации GraphQL, написанный на Go:


Ни одна из библиотек для Go и для Rust не поддерживала работу с GraphQL по протоколу WebSocket.

На самом деле, библиотека graphql_client поддерживает подписки, но, так как она независима от протоколов, мне пришлось самостоятельно реализовать механизмы WebSocket-взаимодействия с GraphQL.

Для использования WebSocket в Go-версии приложения библиотеку нужно было модифицировать. Так как я уже использовал форк библиотеки, мне этого делать не захотелось. Вместо этого я использовал упрощённый способ «наблюдения» за новыми твитами. А именно — я, для получения твитов, каждые 5 секунд отправлял запросы к API. Я не горжусь тем, что поступил именно так.

При написании программ на Go можно пользоваться ключевым словом go для запуска легковесных потоков, так называемых горутин. В Rust же используются потоки операционной системы, делается это посредством вызова Thread::spawn . Для передачи данных между потоками и там и там используются каналы.

Перестрелка – не самая лучшая идея

Чего не стоит делать в Rust, если начали играть в 2021 году

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

В Rust полно игроков и, как говорится, «на каждого бойца найдется боец покруче». Эта фраза максимально точно характеризирует игровой процесс, потому что, даже если вам удастся настрелять десяток новичков, то в какой-то момент за вашей головой придут более опытные игроки и вы потеряете все. Используйте оружие только для самообороны и тогда точно сможете прожить в Rust гораздо дольше!

Топ 8 - Кооперативные шутеры на 2-4 игроков. Небанальная подборка Собрали самые достойные кооперативные шутеры из тех, что не наделали шуму и прошли незаметно для большинства геймеров.

Вот такие советы мы решили дать новичкам, которые только надумали залететь в Rust! Делая все эти вещи, вы гарантировано проживете в виртуальном мире игры чуточку дольше и при этом гораздо лучше узнаете все тонкости проекта. Главное, не забывайте всегда быть начеку, здесь нет зоны комфорта.

gRPC клиент

gRPC клиент в модуле bot создаётся так:

Далее он может быть использован так:

Telegram бот

Как было отмечено ранее, для большей наглядности gRPC клиент является также и Telegram ботом. Для имплементации бота использована библиотека teloxide.

Перейдём сразу к main.rs :

Разработка инструмента командной строки: сравнение Go и Rust

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


Если вам не терпится увидеть код и самостоятельно сравнить один вариант моей программы с другим — то вот репозиторий Go-варианта проекта, а вот — репозиторий его варианта, написанного на Rust.

Никому нельзя верить

Чего не стоит делать в Rust, если начали играть в 2021 году

Этот пункт частично противоречит предыдущему, но при этом он еще более важен. Прежде всего вам стоит забыть о том, что взаимодействие с другими игроками в многопользовательских проектах – это норма. Rust вообще не та игра, где нужно объединяться с незнакомыми людьми, чтобы вместе получить больше лута или ресурсов. Здесь вы можете рассчитывать только на себя, и если начнете доверять первому встречному игроку, то очень скоро поймете, почему этого нельзя делать. Особенно это касается товарищей с хорошей экипировкой, которых вы встретите на своем пути.

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

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

Все вещи в одном месте

Чего не стоит делать в Rust, если начали играть в 2021 году

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

Ни в коем случае не размещайте абсолютно все запасы на единственной базе, да еще и в конкретном помещении. В таком случае после случайного налета кучки любителей халявы вы потеряете абсолютно все. Конечно, вряд ли у новичка хватит ресурсов, чтобы построить себе 4-5 домов и правильно распределить по ним ценные предметы, но хотя бы попробуйте сделать что-то подобное. Неплохим решением будет на территории одной базы построить несколько «нычек» и распределить по ним ресурсы и предметы.

Причины, по которым я выбрал бы Go

Я выбрал бы для некоего проекта Go по следующим причинам:

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

Одному будет тяжело

Чего не стоит делать в Rust, если начали играть в 2021 году

Rust – далеко не самая лучшая многопользовательская игра для одного человека. Здесь есть несколько этапов развития, и добраться до каждого из них можно только за счет продолжительного гринда. Если играть в команде со своими друзьями, то вы гораздо быстрее достигните цели, чем в одиночку.

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

Чего не стоит делать в Rust, если начали играть в 2021 году

Чего не стоит делать в Rust, если начали играть в 2021 году

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

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

Итоги

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

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

Какой язык вы использовали бы для разработки инструмента командной строки?

Не забывайте про аптечки

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

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

Многие из нас получают большое удовольствие, пробуя себя в играх жанра Survival – играх на выживание. Мы собрали лучшее: самое напряженное.

Управление пакетами

В экосистеме Go нет менеджера пакетов или даже официального реестра. Здесь система разрешения модулей основана на импорте модулей с внешних URL.

Rust использует для управления зависимостями менеджер пакетов Cargo, который загружает пакеты с crates.io, из официального реестра для Rust-пакетов. У пакетов из экосистемы Crates может быть документация, размещённая на docs.rs.

Вы всегда в опасности

Чего не стоит делать в Rust, если начали играть в 2021 году

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

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

Локальное окружение

Перед использованием нового набора инструментов я всегда интересуюсь удобством работы с ним. А именно, тем, придётся ли мне использовать некий менеджер пакетов для глобальной установки программ в системе. Или, что кажется мне гораздо более удобным решением, можно ли будет устанавливать всё, ориентируясь на учётную запись пользователя. Мы говорим о менеджерах версий, они упрощают нам жизнь, ориентируясь при установке программ на пользователей, а не на систему в целом. В среде Node.js с этой задачей отлично справляется NVM.

При работе с Go для тех же целей можно пользоваться GVM. Этот проект отвечает за локальную установку программ и за управление версиями. Установить его очень просто:


Готовя среду разработки на Go, нужно знать о существовании двух переменных окружения — GOROOT и GOPATH . Подробности о них можно почитать здесь.

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

В итоге я просто использовал в директории проекта GOPATH=$(pwd) . Главный плюс этого заключался в том, что в моём распоряжении оказалась система работы с зависимостями, ограниченная рамками отдельного проекта, нечто вроде node_modules . Эта система показала себя хорошо.

После того, как я окончил работу над моим инструментом, я обнаружил, что существует проект virtualgo, который помог бы мне решить проблемы с GOPATH .

У Rust есть официальный установщик rustup, который выполняет установку набора инструментальных средств, необходимого для использования Rust. Rust можно установить буквально одной командой. Кроме того, при использовании rustup у нас есть доступ к дополнительным компонентам, к таким, как сервер rls и система форматирования кода rustfmt. Многие проекты требуют ночных сборок набора инструментов Rust. Благодаря применению rustup у меня не возникло проблем с переключением между версиями.

Возможности инструмента командной строки

Вот описание основных возможностей, в частности — команд, которые мне хотелось реализовать в моём инструменте командной строки.

  • hashtrack login — вход в систему, то есть — создание сессионного токена и его сохранение в локальной файловой системе, в конфигурационном файле.
  • hashtrack logout — выход из системы, то есть — удаление сессионного токена, сохранённого локально.
  • hashtrack track <hashtag> [. ] — начало наблюдения за хештегом или за несколькими хештегами.
  • hashtrack untrack <hashtag> [. ] — окончание наблюдения за хештегом или за несколькими хештегами.
  • hashtrack tracks — вывод списка хештегов, за которыми ведётся наблюдение.
  • hashtrack list — вывод 50 последних найденных твитов.
  • hashtrack watch — вывод найденных твитов в реальном времени.
  • hashtrack status — вывод сведений о пользователе в том случае, если был осуществлён вход в систему.
  • Инструмент должен поддерживать опцию командной строки --endpoint , которая позволяет настраивать его на работу с различными серверами.
  • Должна поддерживаться опция командной строки --config , позволяющая загружать конфигурационные файлы.
  • В конфигурационных файлах должно присутствовать свойство endpoint .

Обработка ошибок

В Go ошибки рассматриваются так же, как любые другие значения. Обычный способ обработки ошибок в Go заключается в проверке их наличия:


В Rust есть перечисление Result<T, E> , которое включает в себя значения, выражающие успешное завершение операции и завершение операции с ошибкой. Это, соответственно, Ok(T) и Err(E) . Здесь есть ещё одно перечисление, Option<T> , включающее в себя значения Some(T) и None . Если вы знакомы с Haskell, то вы можете узнать в этих значениях монады Either и Maybe .

Тут, кроме того, есть «синтаксический сахар», имеющий отношение к распространению ошибки (оператор ? ), который разрешает значение структуры Result или Option и автоматически возвращает Err(. ) или None в том случае, если что-то идёт не так.


Этот код является эквивалентом следующего кода:


Итак, в Rust имеется следующее:

  • Монадические структуры ( Option и Result ).
  • Поддержка оператора ? .
  • Типаж From , используемый для автоматического преобразования ошибок при их распространении.

Что такое rrc rust run


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


1


3


3


1


3,336 уникальных посетителей
14 добавили в избранное


































Апать / грейдить - Улучшать строение (солома -> дерево -> камень -> металл -> мвк).
Айр / Айрдроп - гуманитарная помощь игрокам. Может содержать в себе компоненты, оружие, патроны, одежду, броню, инструменты, различный взрыв.

Аэродром - это РТ на котором можно найти различный лут.

Авп - Винтовка L96, мощная снайперская винтовка.

Аутпост - мирный город.

Бомж - игрок который только появился.
Билда - зона которая запрещает\разрешает строить игроку.
Болтовка - снайперская винтовка "болт".

Бичка / Бич пакет / Бичевка - взрыв пакет, сделанный из бобовых гранат, обычно используется в рэйдах.

Берданка - полуавтоматическое винтовка, стреляющая патронами 5.56-мм.

Бобовка - бобовая граната.

Бандит кэмп - город бандитов.

Бадики - корпуса для изготовки оружия. Сущестауют 3 вида: корпус пистолет-пулемëта, корпус полуавтомата, корпус винтовки.

Блочка - Блочный лук.

Беретта - Пистолет M92.

Вайп - очистка сервера и карты от построек игроков / Глобальный вайп - помимо построек очищаются все изученные вами чертежи.
Ветряк - ветрогенератор.

Волчанка - Шапка из волка.

Гир - одежда, снаряжение / Фулл гир - полный сет.
Гантрап - ловушка с дробовиком.
Дипнуть / гоингдип - просочиться в чужой дом когда хозяин открыл дверь. Грубо говоря рейд без взрывчатки.
Деспавн - выкидывать лут на пол с целью его удаления из игры (используется при онлайн рейдах).
Дропнуться "куда либо" - спрыгнуть со здания, сферы, в пещеру без получения урона.
Дуркемпер - человек который сидит под дверьми в надежде получит лут с хозяина дома.
Двушка - двуствольный дробовик.
Еока - самодельный пистолет стреляющий каменными патронами.
Залутыш - человек с полным инвентарем предметов.
Залутать "что либо" - Забрать содержимое инвентаря трупа, ящика.
Заагрить - перевести на себя внимание вертолета, танка, нпс, игрока.

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

Коптер - мини вертолет. Имеет при себе 2 места, пилот и пассажир.

Калаш - калаш он и в Африке калаш.

Космодром / Космо - РТ в котором ездит охраняющий танк.

Казик - казино в лагере бандитов.

Карго - Ивент в океане с большим грузовым кораблем.

Лутовая / лутрум - комната с большим количеством сундуков с ресурсами.
Лрка - штурмовая винтовка LR-300.

ЛЭП, миниЛЭП - линии электропередачи и трансформаторы где спавнятся ящики и бочки с лутом.

МВК - металл высокого качества.

Малый НПЗ - малый нефтеперерабатывающий завод.

Непись / НПС - Бот ученый. Учёных можно разделить на три типа: 1 – мирные учёные-торговцы, 2 – условно мирные учёные-исследователи, 3 – агрессивные военные учёные.

Обзор проекта

У меня есть домашний проект, который я назвал Hashtrack. Это — небольшой сайт, фуллстек-приложение, которое я написал для технического собеседования. Работать с ним очень просто:

  1. Пользователь аутентифицируется (учитывая то, что он уже создал себе учётную запись).
  2. Он вводит хештеги, за появлением которых в Твиттере он хочет наблюдать.
  3. Он ждёт появления на экране найденных твитов с заданным хештегом.

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

gRPC сервер

Функция main сервера представлена ниже:

Имплементация трейта SolarSystemInfo (был показан в предыдущем разделе) выглядит так:

Здесь определена кастомная SolarSystemInfoService структура, которая имеет доступ к БД с помощью Diesel ORM.

Напомню, что get_planets_list и get_planet являются примерами простых RPC, а get_planets — server-side streaming RPC.

Изображения планет включаются в бинарник приложения во время компиляции с помощью библиотеки rust_embed (при разработке они загружаются из файловой системы).

Определение сервиса и генерация кода

Определение сервиса написано на версии proto3 Protocol Buffers и находится в .proto файле:

Здесь определены простые ( unary ) RPC ( GetPlanetsList и GetPlanet ), server-side streaming RPC ( GetPlanets ) и структуры для передачи необходимых данных. Структуры содержат поля как некоторых обычных типов ( uint64 , string , etc.), так и:

  • перечисление ( Planet.type )
  • список ( Planet.satellites )
  • бинарные данные ( Planet.image )
  • тип date/timestamp ( Satellite.first_spacecraft_landing_date )

Для настройки генерации серверного и клиентского gRPC кода сначала добавим следующие зависимости:

Библиотека prost-types позволяет использовать некоторые из well-known типов Protobuf, такие как Empty и Timestamp .

В корне модуля должно быть расположено следующее:

Создадим модуль, который будет содержать сгенерированный код и будет использован серверным и клиентским приложениями:

После запуска сервера или клиента вы можете найти сгенерированный код в файле /target/debug/build/solar-system-info-rpc/out/solar_system_info.rs . Например, для создания сервера вам нужно будет имплементировать сгенерированный трейт SolarSystemInfo :

Сгенерированный трейт SolarSystemInfo

Сгенерированные структуры, используемые функцией get_planet , выглядят так:

Сгенерированные структуры для функции get_planet

Читайте также: