Гайд (руководство) по rust
Содержание:
- Структуры
- Система сборки Rust: Cargo
- Продвинутые концепции для дальнейшего изучения
- Обзор игры Rust
- Автогенерация зависимого кода
- Обзор графики в игре Rust
- Общий обзор языка программирования Rust. Установка
- Удобные инструменты сборки и управления зависимостями
- Простое решение тормозов в Rust
- Включить режим производительности Nvidia
- Простые «состояния типов» в Rust
- Взрывчатка
- Настройки игры и разбор их влияния на FPS
- Изменить параметры электропитания
- Постройки
- Легкий рефакторинг
- Переменные и их изменяемость
- Основание каменной стены
Структуры
Еще одним важным понятием в Rust являются структуры, называемые . Это пользовательские типы данных, создаваемые для представления типов объектов. При создании определяется набор полей, для которых все структуры этого типа должны иметь какие-то значения.
Аналогом этих структур в таких языках, как Java и Python, являются классы.
Вот синтаксис объявления структуры:
struct { : , : ,}
- сообщает Rust, что следующее объявление определит тип данных struct.
- — это имя типа данных, используемого при передаче параметров, таких как или , в строковые и целочисленные типы соответственно.
- эти фигурные скобки обозначают начало и конец переменных, необходимых для структуры.
- — это место, где вы называете первую переменную, которую должны иметь все экземпляры этой структуры. Переменные внутри структуры называются полями.
- — это место, где во избежание путаницы явно определяется тип данных переменной.
Например, создадим структуру , которая включает в себя переменную строкового типа и переменную целочисленного типа .
struct Car{ brand: String, year: u16,};
Каждый создаваемый экземпляр типа должен иметь значения для этих полей. Поэтому создадим экземпляр для конкретного автомобиля со значениями для (модели) и (года выпуска).
let my_car = Car { brand: String:: from ("BMW"), // с явно заданным строковым типом year: 2009,};
Точно так же, как при определении переменных с примитивными типами, определяем переменную с идентификатором, на который будем ссылаться позже.
let = {// поля}
Оттуда будем использовать значения этих полей с синтаксисом . Rust интерпретирует эту инструкцию как «каково значение для идентификатора ?».
println!( "My car is a {} from {}", my_car.brand, my_car.year );}
Вот как выглядит вся структура целиком:
fn main () {struct Car{ brand: String, year: u16,};let my_car = Car { brand: String:: from ("BMW"), year: 2009,};println!( "My car is a {} from {}", my_car.brand, my_car.year );}
В целом структуры отлично подходят для хранения вместе всей информации, относящейся к тому или иному типу объекта, для реализации и обращения к ней в программе.
Система сборки Rust: Cargo
Cargo — это система сборки и диспетчер пакетов Rust. Это важный инструмент для организации проектов на Rust. Здесь приводится перечень библиотек, необходимых проекту (они называются зависимостями). Он автоматически загружает любые отсутствующие зависимости и собирает программы на Rust из исходного кода.
Программы, с которыми мы имели дело до сих пор, достаточно просты, и поэтому зависимости для них не нужны. А вот при создании более сложных программ вам понадобится Cargo с возможностями инструментов, недоступных в рамках стандартной библиотеки. Cargo также используется для загрузки проектов в портфолио на GitHub, так как они хранят все части и зависимости вместе.
Если скачать Rust с официального сайта, Cargo автоматически устанавливается вместе с компилятором () и генератором документации () как часть набора инструментальных средств Rust. Убедиться, что Cargo установлен, помогает ввод в командной строке следующей команды:
$ cargo --version
Для создания проекта с Cargo запустите в интерфейсе командной строки операционной системы следующее:
$ cargo new hello_cargo$ cd hello_cargo
Первой командой создается новый каталог . А второй командой этот новый каталог выбирается.
Генерируется манифест под названием , который содержит все метаданные, необходимые Cargo для компиляции пакета, а также файл , отвечающий за компиляцию проекта.
Чтобы все это увидеть, наберите:
$ tree
Перейдите к местоположению вашего каталога и откройте файл . Внутри вы найдете информацию о проекте. Выглядит это следующим образом:
name = "hello_cargo"version = "1.43.0"authors = edition = "2020"
Все зависимости приведены в категории .
После завершения проекта введите команду : проект будет скомпилирован и запущен.
Продвинутые концепции для дальнейшего изучения
Несмотря на то, что многие из этих компонентов кажутся маленькими, с каждым из них можно шаг приблизиться к полному освоению Rust! Год от года Rust становится все более популярным, а это значит, что сейчас самое время обзавестись навыками для создания низкоуровневых систем будущего.
- 7 Лучших курсов и книг по программированию на Rust для начинающих в 2021 году
- Rust или Си: кто Усэйн Болт в мире программирования?
- Rust: реализация двоичного дерева
Читайте нас в Telegram, VK и
Обзор игры Rust
Изначально авторы предполагали создать простой клон Day Z с зомби, поиском припасов в заброшенных локациях – вот этим всем, чего полно сейчас в любой мало-мальски нормальном проекте о выживании. Со временем, их вкусы переменились в сторону продуманного открытого мира, с упором на процесс создания полезных игровых предметов, но сюжет остался тем же – ходячие мертвяки, угрозы обморожения, истощения, нападения диких животных никуда не делись.
В целом, описание «как играть в Rust», получится уместить в короткое предложение: скрафти всё, что только возможно. На начало имеется только скудный набор стартовых предметов, да нескольких десятков рецептов для переработки добытого лута. Все остальные полезные вещи (в том числе строения, броню, оружие) необходимо мастерить из собранных материалов.
Сражений на долю игрока выпадет тоже не мало. Игра Раст буквально подталкивает к этому. Например, для изучения новых чертежей, рецептов и схем нужно сражаться с животными, сильно заражёнными радиацией. Не редки случаи нападения друг на друга пользователей, будьте начеку!
Но главное веселье начинается ночью. Ведь на охоту выходят кровожадные зомби. Их много, они голодны, не заметны и очень опасны, в частности, благодаря непроглядной тьме. Единственный источник света – факел, но против толпы разъярённой ожившей мертвечины, он — что спичка против льва.
Интересная функция
Иногда (здравствуй, День Зет!) с воздуха сбрасывают гуманитарную помощь. Она представляет собой вместительный зелёный контейнер, наполненный всяческой пользой. В нём есть всё, что пригодиться человеку, пытающемся остаться в живых в критических условиях апокалипсиса: взрывчатку, тринитротолуол, боеприпасы, полезные схемы, которые можно изучить на месте исследовательским набором «Research Kit».
Раз мы заговорили о нём, стоит обмолвиться, что пользоваться набором для сбора данных надо как можно чаще – тогда в вашей копилке крафтовых рецептов значительно прибудет.
Новое амплуа
В последних обновлениях игра Rust стала приобретать черты, характерные для многопользовательской ролевой модели. С уверенностью можно сказать, что проект Rust RPG существенно интересней изначальной ориентации жанра.
Если разработчики допилят мотивацию игроков для сбора в группы, скажем для крупных рейдов, а не только с целью охоты на больших хищников, вроде медведя – геймплей точно перейдёт на новый уровень. Ведь самый распространённый вопрос на форуме — «как играть в rust в одиночку?» Ответ на него – избегать контактов с кем бы то ни было, не смотря на то, что выживать группой гораздо проще.
Оптимизация игры Rust
Ещё один популярный крик души у новичков: «как повысить фпс в Rust». Несколько советов, улучшающих количество кадров в секунду:
- Уберите настройки фильтрации.
- Упростите текстуры – поставьте их на низкие настройки.
- Отключите лишние спецэффекты: отражения, преломление света, зеркальность воды, дисперсию.
- Уберите траву и прочую лишнюю растительность – так производительность значительно повыситься. Сделать это можно открыв консоль на кнопку F1, введя команду grass.on false
Последние штрихи
Многим нравится возможность запускать собственные серверы, здесь она есть. Иногда «Facepunch» раздают специальные бета-ключи для создания лицензированного сервера, отображающегося в списке при подключении к клиенту.
Главная отличительная особенность Раст – помещение игрока в условия, приближенные к первобытным. Даже начинать приходиться с камнем в руках и голым телом. Это выгодно отличает её от остальных разработок в survival-жанре. Если одни пугают сложными условиями, безысходностью, толпами восставших мёртвых или лютым морозом – то она предлагает включить смекалку на полную катушку, чтобы преуспеть в вопросе выживания.
Системные требования Раст
Минимальные
- Операционная система — Windows XP
- Процессор — Intel Core 2 Duo 2.0 Ghz или AMD Athlon 64 X2 4400 и лучше
- Видеокарта — ATI Radeon HD 3870 или Nvidia GeForce 8800 и выше
- Оперативная память — 3 Gb
- Свободное место — 1 Gb
Рекомендуемые
- Операционная система — Windows Vista 7/8
- Процессор — Intel Core 2 Duo @ 3.0 GHz или AMD Athlon 64 X2 6000 и выше
- Видеокарта — Nvidia GeForce GTX 460 или ATI Radeon HD 5850
- Оперативная память — 8 Gb
- Свободное место — 2 Gb
Автогенерация зависимого кода
Процедурные derive-макросы в Rust широко используются для автоматической реализации типажей и прочей кодогенерации. Вот пример:
Так как все эти типажи (, , , , и ) из стандартной библиотеки реализованы для типа полей структуры , то и для всей структуры в целом их реализация может быть выведена автоматически. Другой пример:
Здесь с помощью derive-макросов и из библиотеки для структуры автоматически генерируются методы ее сериализации и десериализации. Дальше можно передавать экземпляр этой структуры в различные функции сериализации, например, преобразующие его в JSON строку.
Вы можете создавать собственные процедурные макросы, которые сгенерируют нужный вам код. Либо пользоваться множеством уже созданных макросов другими разработчиками. Помимо избавления программиста от написания шаблонного кода, у макросов есть еще то преимущество, что вам не нужно поддерживать в согласованном состоянии разные участки кода. Скажем, если в структуру будет добавлено третье поле , то для обеспечения ее корректной сериализации в случае использования derive ничего делать больше не нужно. Если же мы будем сами реализовывать необходимые типажи для сериализации , то нам придется следить за тем, чтобы эта реализация всегда была согласована с последними изменениями в структуре .
Обзор графики в игре Rust
На дворе новое время
К играм непомерно высокие требования, всё должно блистать, и графика, пожалуй, самое важное по мнению нового поколения геймеров. Хотя мы не из таких и любим игры за их игровой процесс, за сюжет, за идею и только потом смотрим на картинку… старики
Но и мы вынуждены топать в ногу со временем и нынешними тенденциями, а потому начинаем именно с графики.
Игра Rust выдаёт отличную картинку. Красивейшие закаты и рассветы, с недавних пор очень симпатичная вода, небо, горы. Порой захожу в игру только ради того, чтобы полюбоваться закатом на крыше только что отстроенного форта.
Закат в раст
Очень много игроков привыкли выключать траву в игре, но наше мнение – нельзя этого делать! Нельзя отключать такую прекрасно реализованную траву! Это преступление! Травка колышется, по ней бегут тени от облаков, в ней можно прятаться, она создает эффект реалистичности. Убирая её, игроки лишаются огромной доли эффекта присутствия.
Трава в раст
Игра написана на движке Unity. А он, как мы знаем, может выдать очень приличные пейзажи! Анимация персонажей и животных хоть и выглядит несколько топорно, но все же она на достойном уровне. Тем более, разработчики регулярно «допиливают» игру и улучшают анимацию, да и графику в целом.
В ранней версии обзора Rust наша оценка графике в игре Rust была7 баллов. Все было здорово, но не идеально, и не хватало мелочей и внимания к деталям. Теперь же, после того, что сделали с экспериментальной версией, можно этот балл повысить на 1. Итого, за графику – 8. Но всё также хотелось бы более реалистичных взрывов, погодных эффектов, смены времен года. И вообще, максимальный балл (10) можно поставить лишь той игре, которая покажет на экране монитора то же, что мы видим за окном… Да, это придирки, игра выдаёт на экран монитора отличную картинку!
Общий обзор языка программирования Rust. Установка
Последнее обновление: 07.05.2021
Rust представляет язык программирования, разработанный в компании Mozilla для большей производительности и безопасности. Его сфера применения довольнно широка.
Благодаря производительности его можно использовать на низком уровне в системном программировании — операционные системы, драйверы, встроенные системы. Но также
его можно использовать для написания прикладных программ и веб-приложений.
На сегодняшний день довольно много компаний применяют Rust в своих разработках. В частности, достаточно назвать такие, как Dropbox, Microsoft, Mozilla, Coursera, Facebook,
Amazon, Discord, Deno.
Некоторые особенности языка Rust:
-
Rust является компилируемым языком со статической типизацией. А это значит, что типы всех используемых в программе данных определяются в момент компиляции,
благодаря чему становится сложнее написать некоректные программы. -
В плане синтаксиса Rust напоминает сиподобные языки, в частности, С/С++. Поэтому тем, кто знаком с каким-то сиподобным языком, особенно, если это
C или C++ будет проще при знакомстве с синтаксисом Rust. -
Имеющаяся в Rust система управления памятью в отличие от C/C++ позволяет более безопасно работать с памятью.
История развития
Изначальный автор языка — Грейдоном Хоаром (Graydon Hoare), который начал развивать Rust как личный проект в 2006 году и который работал в компании
Mozilla. В 2009 году Mozilla начала спонсоровать проект.
Первая стабильная версия языка — Rust 1.0 вышла 15 мая 2015 года. На момент написания данной статьи последней версией является версия Rust 1.52.
8 февраля 2021 года пятью компаниями (AWS, Huawei, Google, Microsoft и Mozilla) была образована независимая некоммерческая организация
Rust Foundation, основной задаче которой является поддержание языка Rust и развитие его экосистемы.
Установка для Windows
После нажатия на кнопку на компьютер будет загружен файл установщика. После загрузки нажмем на этот файл:
Установщик предложит нам на выбор три опции. Опция с номером 1 представляет установку. Поэтому введем единицу:
В конце программа установки радостно нам сообщит, что Rust успешно установлен, и предложит нам нажать на Enter для завершения работы мастера установки:
Нажмем на Enter, и все — мы можем приступать к созданию программ на Rust.
Стоит отметить, что постоянно выходят новые подверсии Rust, и чтобы обновить необходимый инструментарий, необходимо в консоли набрать следующую команду:
rustup update
Проверить номер текущей установленной версии можно с помощью следующей команды:
rustc --version
Вперед
Удобные инструменты сборки и управления зависимостями
Это явно не рекламируется, но многие замечают, что в Rust реализована одна из лучших на сегодняшний день система сборки и управления зависимостями. Если вы программировали на С или С++, и вопрос безболезненного использования внешних библиотек стоял для вас достаточно остро, то использование Rust с его инструментом сборки и менеджером зависимостей Cargo будет хорошим выбором для ваших новых проектов.
Кроме того, что Cargo будет за вас загружать зависимости и управлять их версиями, собирать и запускать ваши приложения, выполнять тесты и генерировать документацию, дополнительно он может быть расширен плагинами и для других полезных функций. Например, существуют расширения, позволяющие Cargo определять устаревшие зависимости вашего проекта, производить статический анализ исходного кода, собирать и редеплоить клиентские части веб-приложений и многое другое.
Конфигурационный файл Cargo использует для описания настроек проекта дружелюбный и минималистичный язык разметки toml. Вот пример типичного файла конфигурации :
А ниже приведены три типичные команды использования Cargo:
С их помощью будет произведена проверка исходного кода на ошибки компиляции, сборка проекта и запуск тестов, сборка и запуск программы на выполнение, соответственно.
Простое решение тормозов в Rust
- Скачайте и запустите всемирно известный CCleaner (скачать по прямой ссылке) — это программа, которая очистит ваш компьютер от ненужного мусора, в результате чего система станет работать быстрее после первой же перезагрузки;
- Обновите все драйверы в системе с помощью программы Driver Updater (скачать по прямой ссылке) — она просканирует ваш компьютер и обновит все драйверы до актуальной версии за 5 минут;
- Установите программу WinOptimizer (скачать по прямой ссылке) и включите в ней игровой режим, который завершит бесполезные фоновые процессы во время запуска игр и повысит производительность в игре.
Включить режим производительности Nvidia
После установки драйвера для видеокарты от компании Nvidia можно ускорить работу Rust с помощью режима производительности. Это немного упростит графику в игре, но повысит FPS
Обратите внимание, что этот метод доступен только в случае, если у вас видеокарта с чипом от Nvidia. Вот как это сделать:
- В нижнем правом углу экрана, в трее, нажать правой кнопкой мыши на иконку «Настройки NVIDIA»;
- В открывшемся окне справа выбрать вкладку «Параметры 3D»;
- Нажать на опцию «Регулировка настроек изображения с просмотром»;
- Справа поставить флажок напротив «Пользовательские настройки с упором на:»;
- Передвинуть «ползунок», который находится ниже, в крайнюю левую позицию «Производительность»;
- Снизу нажать на кнопку «Применить».
Далее необходимо запустить Rust и убедиться, что все отображается корректно. Если возникают проблемы, то нужно вместо «Пользовательские настройки с упором на:» выбрать «Настройки согласно 3D-приложению».
Простые «состояния типов» в Rust
Как мы это реализуем в Rust?
Самым простым способом является введение подходящих типов для представления операций над .
Перепишем верхний пример:
Это работает и в более сложных случаях:
Система типов Rust проверяет, чтобы убедиться, что переменная не используется после того, как она была «потреблена» (consumed, moved). Например, съела переменную.
Даже если бы мы попытались скрыть переменную где-то и попытаться снова её использовать после вызова , мы бы были остановлены компилятором:
Давайте попробуем обмануть компилятор, сделав файл доступным, после того, как он был закрыт:
Мы в очередной раз были остановлены компилятором: не используя , мы не можем обойти инвариант — не может быть вызван после .
Данный пример показывает первый кирпич состояний типов в Rust: типизированная операция перемещения. Пока все хорошо. Однако мы рассматривали только простой случай, в котором файлы могут только открыты или закрыты.
Давайте посмотрим, можем ли мы работать с более сложными случаями.
Взрывчатка
Тема взрывов в Rust занимает одну из ключевых ролей в игре. Чаще всего гранаты и С4 применяются в рейдах. Рейдом называется процесс проникновения в чужое жилище с целью заполучения ценного лута (провизии), такого как оружие, медикаменты, броня, патроны, взрывчатка и ресурсы. В будущем мы посвятим много статей на данную тему и рассмотрим все более детально.
Сравнение взрывчатки
Наименование | Damage (Урон) | Range (Дальность) | Рецепт | |
F1 Grenade (Ручная граната F1) | 75 | бросок около 40 м, радиус поражения около 2 м | 80 Gunpowder, 40 Metal Fragments (80 Пороха, 40 Кусков металла) | |
Explosive Charge (Заряд С4) | 600-1000 | устанавливается на поверхность, радиус поражения около 4 м | 15 Explosives, 1 Flare, 5 Leather (15 Взрывчатки, 1 Фаер, 5 Кожи) |
Настройки игры и разбор их влияния на FPS
Вкладка Options
Field of view (угол обзора) – этот параметр изменяет угол обзора и влияет на FPS довольно сильно, поэтому, если вам нужно больше FPS, то ставьте его на минимум. Остальные параметры во вкладке «Options» не влияют на FPS!
Graphics
Depth of field (глубина резкости) – это параметр, который создаёт фокусировку камеры, очень багованый, часто неправильно работает, поэтому его стоит выключить.
Ambient occlusion (глобальное затемнение) – параметр, который добавляет больше теней, забирает много FPS, хотя при его включении игра становится значительно красивее. Всё же игрокам, у которых низкий FPS, я бы посоветовал его отключить.
Anti aliasing (сглаживание) – потребляет мало FPS, да и качество почти не меняется при смене уровней параметра, поэтому можно смело ставить FXAA.
High quality bloom (высококачественные блики солнца) – делает солнце более красивым, потребляет мало FPS.
Lens dirt (грязные линзы) – добавляет атмосферности, потребляет мало FPS.
Motion blur (размытие движений) – параметр, который добавит размытие по краям экрана во время движения игрока, игра выглядит намного красивее с ним и движения игрока становятся более плавные.
Sun shafts (солнечные лучи) – параметр добавляет лучи солнца, добавляя атмосферности, потребляет мало FPS.
Sharpen (резкость) – параметр, который добавляет чёткость изображению, потребляет мало FPS.
Vighet (виньетка) – параметр добавляет затенения по углам экрана, добавляет атмосферности, потребляет мало FPS.
Graphics quality (качество графики) – изменяет прорисовку почти всего в игре. Важный параметр, его стоит отключать в последнюю очередь, т.к. без хорошей картинки играть будет некомфортно и неудобно.
Grass displacement (движение травы) – мнёт траву под ногами, помогает искать предметы в траве. Мало потребляет FPS, добавляет атмосферности.
Shadow quality (качество теней) – меняет качество теней, очень малое потребление FPS.
Grass shadow (тени травы) – параметр, который добавляет тени от травы, влияние на FPS малое, оно и незаметно.
Contact shadows (контактные тени) – добавляет ещё больше теней, влияние на FPS очень маленькое, но есть.
Shadow cascades (каскады теней) – параметр влияющий на тени, работает странно, так как больший прирост FPS наблюдается, когда вы ставите параметр на 2, а не на 0. Сильно влияет на тени, потребляет много FPS.
Water quality (качество воды) – потребляет много FPS, разница при смене параметра сильно ощутима.
Water reflections (отражения на воде) – потребляет много FPS, но без этого параметра вода выглядит не очень.
World reflections (отражения мира) – изменений в графике почти нет, они даже не заметны, да и на FPS он не влияет.
Max shadow light (максимальное кол-во теней от света) – стоит отключить, в графику изменений не приносит, зато потребляет FPS, хотя совсем немного.
Shader level (уровень шейдеров) – много потребляет FPS, но и влияние на графику оказывает большое, особенно на графику земли.
Draw distance (дальность прорисовки) – влияет на прорисовку, сильно влияет на FPS.
Shadow distance (дистанция теней) – потребляет много FPS, сильно влияет на графику.
Anisotropic filtering (анизотропная фильтрация) – малое потребление FPS, сильное влияние на графику. Влияет на графику объектов, на которые вы смотрите под углом.
Parallax mapping (параллактическое отображение) – самый ненужный параметр, потребляет много FPS, графику не меняет, в любом случае его стоит отключить.
Performance
Max gibs (количество частей, на которые распадаются объекты) – потребляет очень много FPS, при чём на ПК любой мощности, параметр стоит поставить на минимум.
Particle quality (качество частиц) – малое потребление FPS, зато большое влияние на графику.
Object quality (качество объектов) – параметр влияет на прорисовку построек, потребление FPS зависит от выставленного числа. Больше число-больше забирает FPS.
Tree quality (качество деревьев) – до числа 80 FPS мало меняется, а при увеличении числа в настройках, начинает потреблять много FPS.
Terrain quality (качество земли) – изменения в графике едва заметны, изменения FPS тоже малы, параметр можно выключать.
Grass quality (качество травы) – влияет на прорисовку травы, потребление FPS относительно выставленного числа. Больше число-меньше FPS!
Decor quality (качество декораций) – влияния на графику практически нет, на FPS тоже, параметр можно отключить.
Изменить параметры электропитания
По умолчанию в компьютере установлен сбалансированный режим электропитания, который, а в некоторых ноутбуках, в целях увеличения времени работы, и вовсе установлена экономия энергии.
Это не дает компьютеру раскрыть свой потенциал в Rust полностью, поэтому первым делом нужно открыть панель управления, которую можно найти с помощью поиска. После нужно сделать следующее:
- Выбрать режим просмотра «Мелкие значки»;
- Кликнуть на «Электропитание»;
- На экране найти опцию «Настройка схемы электропитания», кликнуть на нее;
- Кликнуть на «Изменить дополнительные параметры питания»;
- В открывшемся окне найти выпадающий список;
- В списке выбрать «Высокая производительность»;
- Нажать кнопку «Применить», затем кликнуть «ОК».
Постройки
Бетонная баррикадаБольшой водосборникБронированная дверьВитрина магазинаВысокая внешняя деревянная стена Высокая внешняя каменная стенаВысокая ледяная стенаВысокие внешние деревянные воротаВысокие внешние каменные воротаГаражная дверьГорнорудный карьерДверной доводчикДверной замокДверь из листового металлаДвойная бронированная дверьДвойная деревянная дверьДвойная металлическая дверьДеревянная баррикадаДеревянная баррикада с проволокойДеревянная дверьДеревянная лестницаДеревянные решеткиДеревянные ставниКаменная баррикадаКодовый замокКороткая ледяная стенаЛестничный люкМаленький водосборникМеталлическая баррикадаМеталлическая вертикальная бойницаМеталлическая витрина магазинаМеталлическая горизонтальная бойницаМеталлические оконные решеткиМешки с пескомНефтяная вышкаПлан постройкиРешетчатый настилСеткаСетчатая дверьСетчатый заборСмотровая вышкаТреугольная решетка для полаТреугольный люкТюремная дверьТюремная решеткаУкрепленное стеклянное окноУсиленное стеклянное окноШкаф
Легкий рефакторинг
Развитая строгая статическая система типов в Rust и попытка выполнить как можно больше проверок во время компиляции, приводит к тому, что дорабатывать и рефакторить код становится доcтаточно просто и безопасно. Если после изменений программа собралась, то это значит, что в ней остались только логические ошибки, не связанные с тем функционалом, проверка которого была возложена на компилятор. В сочетании с легкостью добавления модульных тестов для проверки логики, это приводит к серьезным гарантиям надежности программ и росту уверенности программиста в корректной работе своего кода после внесения изменений.
Переменные и их изменяемость
Переменные — это точки данных, которые сохраняются и помечаются для последующего использования. Формат объявлений переменных таков:
let = ;
Имя переменной должно быть информативным, т. е. описывать, чем является ее значение. Например:
let my_name = "Ryan";
Здесь создана переменная со значением .
Совет Всегда давайте переменным названия, начинающиеся со строчной буквы, а новое слово начинайте с заглавной.
В Rust переменные неизменяемы по умолчанию, т. е. их значение нельзя изменить после того, как они заданы.
Например, вот этот код выдаст ошибку во время компиляции:
fn main() { let x = 5; println!("The value of x is: {}", x); x = 6; println!("The value of x is: {}", x);}
Ошибка в строке 4, где мы попытались установить значение . Но значение уже задано в строке 2 и изменить его нельзя.
На первый взгляд такое свойство языка Rust кажется неудобным, но оно помогает применять лучшие практики минимизации изменяемых данных. Ведь наличие изменяемых данных часто приводит к появлению багов, если как минимум две функции ссылаются на одну и ту же переменную.
Представьте, что у вас есть две функции: , которая использует переменную, имеющую значение , и функция , которая изменяет эту же переменную. Выполнение функции будет прервано!
Чем больше у вас становится переменных и функций, тем легче случайно изменить их значения. Такого рода ошибки поддаются отладке с трудом, поэтому в Rust предпочитают избегать их в принципе.
Чтобы переопределить это значение по умолчанию и создать изменяемую переменную, объявим ее вот так:
let mut x = 5;
Изменяемые переменные чаще всего используются как переменные-итераторы или как переменные в структурах цикла .
Основание каменной стены
Теперь, когда вы создали все необходимое и укрепили свою базу, пришло время подумать об улучшении прочности вашей базы путем создания каменных стен.
Это отличный шаг к обеспечению долговечности вашей базы, поскольку камень в три раза более устойчив к взрывчатым веществам, чем ваши укрепленные деревянные стены.
Ваши каменные стены получат десять зарядов взрывчатки от противников, чтобы снести ваши стены, в отличие от трех зарядов, необходимых для разрушения укрепленных деревянных стен.
Чтобы обеспечить полное обновление полностью усиленной базы, вам нужно собрать одну тысячу шестьсот камней.
Используйте свой топор и метод подбора, чтобы найти свободный камень, чтобы собрать достаточно для вашего подкрепления.
Собрав весь необходимый камень, улучшите все компоненты своей базы.
Улучшите свой фундамент, три построенные вами укрепленные деревянные стены, деревянный дверной проем и фундаментный потолок, построенный вами ранее.