Введение в программирование на rust

Алан-э-Дейл       30.08.2022 г.

Акт номер 0xFFFFFFFF: Meet Garbage Collector

Автоматический сборщик мусора! Зачем вообще программисту выделать память? Почему бы просто не сделать так – когда он создаёт переменную, пусть платформа сама возьмёт память с полочки. А когда переменная больше не нужна (программист выкинул все указатели на эту переменную) то отдельная программа которая запускается параллельно с вашей программой, называемая сборщик мусора, возьмёт и сотрёт эти данные из памяти.

Всё просто прекрасно и хорошо. Но… Проблема в том, что сборщик мусора не всегда так уж и хорош и может создать ситуации, когда мусора становится слишком много. Когда ваше бизнес-приложение заточено на показ трёх значений курсов валют на экране, то сборщик мусора работает просто прекрасно. А вот если вы пытаетесь сделать ленту из видео файлов с «бесконечным скроллом» то сборщик мусора может запросить 8 гиг памяти у системы и конкретно всё затормозить.

Идея сборки мусора перекочевала в javascript. В общем-то, это не очень плохая идея. Она просто накладная. У вас запускается не только ваша программа, но и программа, которая следит чтобы ваша программа нормально работала.

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

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

Прибор ночного видения ночью

Так, а чем же можно заняться ночью? Чаще всего игроки просто-напросто ставят свои печки на переплавку фрагментов металла или серы, а сами же в это время находятся в режиме AFK (Awayfromkeyboard, то есть отошёл от компьютера). По сути-то, больше ночью и нечем заняться. Можно также заняться крафтом тех предметов, на создание которых уходит куча времени. Ну, или на крайняк можно пофармить ресурсов, но ночью это не совсем удобно, хотя на многих модифицированных серверах ночью действуют повышенные рейты добычи ресурсов.

Электричество

HBHF-датчикRAND-переключательTest GeneratorАвтоматическая турельБлокаторБольшая анимированная неоновая табличкаБольшая солнечная панельБольшой аккумуляторВетрогенераторВодяной насосВоспламенительГофра для кабеляЖидкостный разделительЗвуковая сигнализацияКатушка ТеслаКнопкаКомбинатор питанияКомпьютерная станцияКонтроллер двериЛазерный датчикЛифтМаленький аккумуляторМалый генераторМигалкаНажимная плитаНеоновая табличка (большая)Неоновая табличка (маленькая)Неоновая табличка (средняя)ПейджерПереключательПереключатель «И»Переключатель «ИЛИ»Переключатель «Исключающее ИЛИ»Подъемник для транспортаПоисковый фонарьПотолочный светильникПроводПростая лампаРадиопередатчикРадиоприемникРазбрызгиватель РазветвительРоскошная Рождественская гирляндаСиренаСоединитель жидкостиСредний аккумуляторСредняя анимированная табличкаСчетчикСчетчик ресурсовТаймерТренировочная мишеньУмная СигнализацияУмный переключательЦиркуляционный насосШлангЭлектрический обогревательЭлектрический разветвительЭлектроочиститель водыЯчейка памяти

Плюсы и минусы языка

Когда язык совмещает в себе несколько разных подходов из других языков, он получает большинство преимуществ каждого из них:

  • высокая скорость работы программ;
  • возможность написать код в ООП-стиле: с классами и объектами (но есть ограничения);
  • стабильность в работе и при компиляции;
  • компилятор сам предлагает варианты исправления ошибок в коде;
  • кросс-платформенный компилятор;
  • поддержка многопоточности;
  • поддержка «небезопасных» блоков для прямой работы с памятью;
  • можно вставлять код на C и C++.

Минусы в основном связаны со скоростью развития языка. Так как Rust развивается очень быстро, то часто бывает так, что код из старой версии не работает в новой версии. Ещё к минусам можно добавить:

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

Владение

Владение — это центральная особенность Rust и одна из причин такой его популярности.

Во всех языках программирования должна предусматриваться система освобождения неиспользуемой памяти. В некоторых языках, таких как Java, JavaScript или Python, есть сборщики мусора, которые автоматически удаляют неиспользуемые ссылки. В низкоуровневых языках типа C или C++ от разработчиков требуется всякий раз, когда это необходимо, выделять и освобождать память вручную.

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

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

Вот эти правила владения.

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

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

fn main() {     let x = 5; // переменная x владеет значением 5     function(x);} fn function (number : i32)   { // number становится владельцем значения 5        let s = "memory";  // начинается область видимости переменной s, здесь s становится действительной        // здесь с s выполняются какие-то действия    }                                  // эта область видимости заканчивается, и теперь s                                       // больше недействительна

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

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

Rust сервера

57 -1

DarkZone PVE |Zomby|Kits|RaidBaze|

3/250

212.22.92.25:28035
LuminousWorld.. 2318

14

59

Rust Friends PVE (No KILL-No RAID)

2/100

37.230.137.76:20000
Procedural Ma.. 2318

60 +2

Fast_CD PVE|NoRaid|NoKill|ClassSystem|Kits|HOME Recycler|ZO

0/100

94.143.47.239:28015
Land_of_fanta.. 2318

44

64

> [RU/EU] Мирный

4/50

185.189.255.118:35100
Procedural Ma.. 2318

67 +1

Славянский сервер

2/244

80.249.131.22:28016
Procedural Ma.. 2318

19

69 -3

Славянский сервер Classic

1/244

80.249.131.22:28015
Procedural Ma.. 2318

19

73 +1

DEEPRUST|x1000000|CW|HACrequired|CUSTOM

0/100

37.230.228.84:20110
StrengtH_ln_D.. 2318

77 +1

[EU/RU] SEMI-CLASSIC SERVER NOLIMIT

1/200

185.189.255.85:35100
Procedural Ma.. 2318

82 +4

Russian Bears/classic/Fun/Wipe 08.10

1/100

212.22.93.163:28025
Procedural Ma.. 2318

16

87 +13

RUST XXL

1/50

185.66.84.228:35100
Procedural Ma.. 2318

90

Classic x2

0/200

212.220.212.80:28015
Procedural Ma.. 2318

96 +1

# FIGHT FOR LIFE x1000000

0/50

194.147.90.79:28015
Procedural Ma.. 2318

97 +9

Rice | Classic — Global Wipe 07.10

4/200

185.189.255.66:35000
Procedural Ma.. 2318

100 -7

SAINTRUST|MAX3|X5-X15|RPG|kit|tp

0/100

212.22.93.97:28015
Wild_West 2318

123 +3

UC-RUST PVE — Custom Map

0/50

116.202.241.49:20570
ProcedurUCRus.. 2318

9.4

124 +3

LIVERY-RUST #1 | Wipe 08.10.2

1/50

185.189.255.239:36000
Procedural Ma.. 2318

1

128 +14

RU MAX 2 WIPE 08.10〔X5/X10|LOOT+|TP|UP|KIT〕

0/80

185.189.255.19:35700
Procedural Ma.. 2318

139 +2

REBELS PVE-P

1/100

185.189.255.221:30015
Procedural Ma.. 2318

140 -19

[UA/RU] GRAND ISLAND made in Kyiv WIPE 07.10

offline

178.158.248.149:28015
Procedural Ma.. 2318

145 +4

Fast_CD PVP|RaidableBases|ClassSystem|Kits|HOME Recycler

0/250

185.189.255.221:34015
Namalsk_PVP_v.. 2318

14

146 -35

[RU/EU] KAMCHATKA | MODDED

3/100

91.189.238.62:28020
Wild_West 2318

152 +13

[EU/RU] HOLYRUST

1/50

185.189.255.68:36200
Holypornk 2318

165 -10

RCVL_25Rus Max3

4/51

95.154.95.23:28015
Procedural Ma.. 2318

166 +1

OBELISK #2 [MAX2| X2/X3 | MODS |EVENT] 08.10

0/100

176.38.167.39:28020
Barren 2318

174 +11

-=ZELNET.SU=- (Vanilla-RU)

0/50

212.22.93.196:28015
Procedural Ma.. 2318

177 +19

[RU/EN] Fresh PVE [RaidableBase|Events|NPC|NoKill/NoRaid]

0/50

157.90.176.144:20800
Procedural Ma.. 2318

180 +9

PVP GorilaRust |RU|RPG|Zombie|Quests|NPC|Meteor|

0/200

185.189.255.63:35200
Procedural Ma.. 2318

187 +1

(RU) ALSTAUST max3/x2

1/200

185.66.84.233:35100
Procedural Ma.. 2318

188 -5

Stranger Classic

0/50

37.228.89.250:28015
Procedural Ma.. 2318

191 +8

Single Room RUST PvP | KIT | SETHOME (GlobalWIPE 07.10)

0/150

185.9.145.134:28267
Procedural Ma.. 2318

8.1

1>>>

Акт номер 0, Вступление

Ок. Мне довелось обучать программистов вот уже как 10 лет. Я видел разный народ. Кто-то приходил ко мне с вопросами о том, как компилятор оптимизирует код с поддержкой MMX в процессоре, а кто-то спрашивал, можно ли скомпилировать код на Java в С#. Разница между первыми и вторыми – это понимание того как работает процессор.

В этот момент большинство из тех кто учился программировать по ютубу просматривая видео из серии «Как скачать генератор to-do list на node.js, React, brew, JSX, Pug, LESS за 10 секунд» начинают убегать. Не бойтесь. Я попытаюсь всё объяснить по-человечески. Конечно, есть на хабре и те, кто могут открыть бинарный файл в HEX, посмотреть на 7а 45 4с 46 01 01 01 00 и сказать: «Да этож линуксовский бинарник!» Таким не обязательно читать дальше.

Что делать в расте, если ты профи

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

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

Вообще, в игре вагон подобных серверов, на которых можно не только фармить с самого начала, а сидеть уже на всём готовом. Можно также опробовать сервера в жанре «Симулятор рейда», на которых игрокам предстоит рейдить вражескую постройку или оборонять свою. И такие сервера встречаются в различных вариациях.

Рейд

Функции

Функции — это наборы связанного кода на Rust, объединенные под кратким условным обозначением и вызываемые из других частей программы.

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

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

Вот формат для объявления функции:

fn (: ) {    }

Это уже знакомое нам сокращение от function («Функция»). За ним в коде Rust следует объявление функции.

Здесь находится идентификатор функции, который будет использоваться при ее вызове.

Эти скобки заполняются любыми параметрами, которые нужны функции. В данном случае никаких параметров не передается, поэтому скобки оставлены пустыми.

А здесь передаваемому значению присваивается имя. Это имя выступает в роли имени переменной, ссылающейся на параметр в любом месте тела функции.

После параметра необходимо явно указать тип. Во избежание путаницы неявная типизация параметров в Rust запрещена.

Фигурные скобки обозначают начало и конец блока кода. Код внутри скобок выполняется при каждом вызове идентификатора функции.

А это заполнитель для кода функции. Лучше не включать сюда никакого кода, не связанного прямо с выполнением задачи функции.

Добавим немного кода. Переделаем в функцию :

fn say_hello() {    println!("Hello, world!");}

Совет Увидели — значит, вы имеете дело с вызовом функции. Если параметров нет, получаем внутри скобок пустое поле параметров. Сами скобки все равно остаются, указывая на то, что это функция.

Функция создана, теперь вызовем ее из других частей программы. Программа начинается в , поэтому вызовем оттуда.

Вот как будет выглядеть полная программа:

fn say_hello() {    println!("Hello, world!");}fn main() {    say_hello();}

Берем ипотеку

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

Не торопитесь со строительством в начале игры, ибо остальные игроки не позволят вам спокойно строить дом. Альтернатива – пещеры, по следующим причинам:

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

Получается, что в пещере:

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

Компоненты

БрезентБронированный модульБронированный пассажирский модульВеревкаДорожные знакиКабина с двигателемКарбюратор высокого качестваКарбюратор низкого качестваКарбюратор среднего качестваКлапаны высокого качестваКлапаны низкого качестваКлапаны среднего качестваКлейКоленчатый вал высокого качестваКоленчатый вал низкого качестваКоленчатый вал среднего качестваКорпус винтовкиКорпус пистолет-пулеметаКорпус полуавтоматаЛистовой металлМеталлическая пружинаМеталлическая трубаМеталлическое лезвиеМодуль двигателя автомобиляМодуль двигателя транспортаМодуль для Большого ГрузовикаМодуль задних сиденийМодуль кабины транспортаМодуль таксиНабор для шитьяОтбеливательПалочкиПассажирский модульПоршни высокого качестваПоршни низкого качестваПоршни среднего качестваПропановый баллонСвеча зажигания высокого качестваСвеча зажигания низкого качестваСвеча зажигания среднего качестваСкотчСтарые микросхемыТопливный бакШестерниЭлектрический предохранитель

Одежда

Movember-усыАнтирадиационный костюмБалаклаваБаллон с воздухомБанданаБорода СантыБотинкиБронированный костюмБроня из дорожных знаковВодолазкаВязаная шапочкаГидрокостюмДеревянные щиткиДеревянный нагрудникДеревянный шлемЖелезная маскаЖилет из шкурыЗимняя курткаКартонные Movember усыКепкаКилт из дорожных знаковКожаные перчаткиКомбинезонКонная броня из дереваКонная броня из дорожных знаковКостюм «Ниндзя»Костюм кроликаКостюм мумииКостюм призракаКостюм ученогоКостюм хирургаКостюм чучелаКостюм-бочкаКостяная броняКостяной шлемКроличьи ушкиКурткаЛасты для дайвингаМайкаМаска быкаМаска драконаМаска крысыМеталлический нагрудникНагрудная повязкаНаушникиОбувь из мешковиныОбычные подковыОдежда бандита-охранникаОленьи рогаОчки ночного виденияПанамаПерчатки из дорожных знаковПерчатки из мешковиныПовязка из мешковиныПовязка чучелаПодводная маскаПодковы высокого качестваПончоПраздничный колпакПротивогазРубашкаРубашка из мешковиныСапоги из шкурыСапоги-лягушкиСветящиеся глазаСедельная сумкаСедло для лошадиСиний комбинезонСолнцезащитные очкиТактические перчаткиТолстовка с капюшономТяжелые пуленепробиваемые поножиТяжелый латный нагрудникТяжелый пуленепробиваемый шлемФиолетовые солнцезащитные очкиФуражка шахтераФутболкаШапка СантыШапка из волкаШапка кроликаШлем ClatterШлем бунтаряШлем из ведраШлем из кофейной банкиШляпа со свечойШляпа-гнездоШортыШтаныШтаны из мешковиныШтаны из шкурыЮбка из кожыЯщик-костюм

Что делать в расте, если тебе скучно

Да, порой бывает и такое, что раст с его перестрелками и рейдами докучает. В этом случае можем посоветовать вам совершенно иной тип серверов в жанре RPG. В чём же особенность данных серверов? Каждый игрок будет отыгрывать какую-то определённую роль.

Упомянем и сервера в жанре Battle Royal. Об этом жанре известно чуть-ли не каждому геймеру. Ну, а если вы впервые слышите про королевскую битву – с подключением интернета вас, сейчас по быстренькому введём в курс дела. Игры в жанре Battle Royal вынуждают игроков дислоцироваться на определённые участки карты, где нужно искать снаряжение для войны с другими игроками. Искать нужно оружие, патроны, медикаменты, броню, и это только основные предметы, необходимые для победы. Никаких возрождений нет – если умерли – наблюдайте за командой, если та ещё жива. Карта то и дело сужается: если игрок оказывается за границей доступной зоны, его здоровье начинает уменьшаться. Вообще, если интересен подобный жанр, можем посоветовать вам опробовать такие игры, как Apex Legends и Playerunknown’sBattlegrounds, а также Fortnite – именно эти 3 игры считаются наиболее популярными в жанре королевской битвы. И да, в Rust тоже реализовали популярный жанр, пусть и на модифицированных серверах.

А почему бы не попрактиковаться в стрельбе? Хороший AIM всегда пригодиться, тем более в шутерах. Тренироваться можно, и даже нужно в Rust, если в другие шутеры вы играете реже. Если говорить о тренировках коротко, то рекомендуем следующую схему:

  • Практика стрельбы на ботах на серверах по типу Hungry Aimbots;
  • Закрепление навыков против реальных игроков на Battlefield серверах.

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

Телега

Таблица рейдерства RUST: Расчёт количества взрывчатки

Доброго времени суток, Дорогие Друзья! Мы представляем Вам гайд «Таблица рейдерства RUST: Расчёт количества взрывчатки». И если Вы еще не ознакомились с предыдущими гайдами — мы рекомендуем Вам наверстать упущенное, чтобы Вам было понятно о чем сегодня пойдет речь. Мы надеемся, что этот гайд Вам будет полезен!

Бобовая граната:

Шкаф — 3 | Сера — 360Автоматическая турель — 16 | Сера — 1,920Огненная турель — 7 | Сера — 840Ловушка из дробовика — 7 | Сера — 840Металлическая витрина магазина — 84 | Сера — 10,080Люк — 18 | Сера — 2,160Решётчатый настил — 18 | Сера — 2,160

Бобовая сишка:

Шкаф — 1 | Сера — 480Автоматическая турель — 2 | Сера — 960Огненная турель — 1 | Сера — 480Ловушка из дробовика — 1 | Сера — 480Металлическая витрина магазина — 18 | Сера — 8,640Люк — 4 | Сера — 1,920Решётчатый настил — 4 | Сера — 1,920

Разрывные патроны (самый выгодный рейд):

Шкаф — 9 | Сера — 225Автоматическая турель — 100 | Сера — 2,500Огненная турель — 30 | Сера — 750Ловушка из дробовика — 30 | Сера — 750Металлическая витрина магазина — 300 | Сера — 7,500Люк — 63 | Сера — 1,575Решётчатый настил — 63 | Сера — 1,575

Шкаф — 1 | Сера — 2,200Автоматическая турель — 1 | Сера — 2,200Огненная турель — 1 | Сера — 2,200Ловушка из дробовика — 1 | Сера — 2,200Металлическая витрина магазина — 3 | Сера — 6,600Люк — 1 | Сера — 2,200Решётчатый настил — 1 | Сера — 2,200

Ракета:

Шкаф — 1 | Сера — 1,400Автоматическая турель — 4 | Сера — 5,600Огненная турель — 2 | Сера — 2,800Ловушка из дробовика — 2 | Сера — 2,800Металлическая витрина магазина — 6 | Сера — 8,400Люк — 2 | Сера — 2,800Решётчатый настил — 2 | Сера — 2,800

Скоростная ракета:

Шкаф — 1 | Сера — 420Автоматическая турель — 10 | Сера — 4,200Огненная турель — 4 | Сера — 1,680Ловушка из дробовика — 4 | Сера — 1,680Металлическая витрина магазина — 22 | Сера — 9,240Люк — 5 | Сера — 2,100Решётчатый настил — 5 | Сера — 2,100

40mm Граната:

Шкаф — 1Автоматическая турель — 12Огненная турель — 6Ловушка из дробовика — 6Металлическая витрина магазина — 30Люк — 7Решётчатый настил — 7

Огнемёт:

Деревянная стена | Топливо — ×196Деревянная дверь | Топливо — ×84Высокая внешняя деревянная стена | Топливо — ×392Деревянная оконная решётка | Топливо — ×196

Шкаф | Топливо — ×42Автоматическая турель | Топливо — ×392

Огненная стрела:

Деревянная стена — 25 стрелДеревянная дверь — 50 стрелВысокая внешняя деревянная стена — 250 стрелДеревянная оконная решётка — 125 стрел

Шкаф — 25 стрелАвтоматическая турель — 125 стрелОгненная турель — 75 стрелЛовушка из дробовика — 75 стрел

Каменный патрон:

Деревянная стена — ×93Каменная стена — ×556

Деревянная дверь — ×45

Высокая внешняя деревянная стена — ×186Высокая внешняя каменная стена — ×556

Деревянная оконная решётка — ×93

Шкаф — ×23Автоматическая турель — ×56Огненная турель — ×17Ловушка из дробовика — ×17

Бобовая граната — 191 | Сера — 22,920Бобовая сишка (сачель) — 20 | Сера — 9,600Разрывные патроны — 571 | Сера — 14,275С4 — 3 | Сера — 6,600Ракета — 11| Сера — 15,400Скоростная ракета — 7 | Сера — 1,400

А на этом все, Дорогие Друзья. Мы надеемся, что гайд «Таблица рейдерства RUST: Расчёт количества взрывчатки» был полезен для Вас. Ищите больше гайдов по всем играм на нашем сайте!Удачных Вам рейдов, и приятной Вам игры!

Синтаксис и код

За основу синтаксиса в Rust взят синтаксис из C и C++.Например, классический «Привет, мир!» на Rust выглядит так:

Если вы знакомы с подобным синтаксисом, то сможете быстро начать писать и на Rust. Другое дело, что в Rust есть свои особенности:

  • переменные менять нельзя, а если нужно — при объявлении указывают ключевое слово mutable;
  • все команды внутри условных операторов, циклов и других блочных конструкций обязательно брать в фигурные скобки, даже если там будет всего одна команда;
  • аргументы у условных операторов, например if или while, в скобки брать не нужно;
  • при объявлении переменной можно использовать условный оператор:

Последнее разберём подробно. При такой записи переменная x будет равна четырём, если функция new_game() вернёт значение true. Если этого не случится, компилятор вызовет функцию reload() и проверит, что получилось. Если true, то x примет значение 3, а если и это не сработает — то x станет равным 0.

Ещё в Rust есть сравнение переменной с образцом. В зависимости от того, с каким образцом совпало значение переменной, выполнится та или иная функция:

Комментарии

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

В Rust есть два способа писать комментарии. Первый — использовать двойную косую черту . В этом случае все, вплоть до конца строки, игнорируется компилятором. Например:

fn main() {    // Эта строка полностью игнорируется    println!("Hello, world!"); // А эта напечатала сообщение    // Все готово. Пока!}

Второй способ — предварять комментарий косой чертой со звездочкой и завершать его звездочкой с косой чертой . Преимущества такого способа оформления комментариев: 1) есть возможность помещать комментарии в середину строки кода и 2) так легче писать многострочные комментарии. Недостаток в том, что во многих случаях приходится задействовать больше символов, чем просто .

fn main(/* я могу это сделать! */) {    /* первый комментарий  */    println!("Hello, world!" /* второй комментарий */);    /* Все готово. Пока!       третий комментарий     */}

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

Предметы

Большая деревянная табличкаБольшая печьБольшая плантацияБольшой деревянный ящикБольшой носокБольшой флаг (На флагштоке)Большой флаг (Настенный)Бочка с водойБочка-костерБумажная картаБурдюкВерстак второго уровняВерстак первого уровняВерстак третьего уровняВращающееся колесоГоризонтальная фоторамкаДверной молоток «Дракон»Дверной молоток «Череп»Двухсторонняя вывескаДвухсторонняя вывеска с орнаментомДеревянный ящикДиванДоска объявленийДоска объявлений (Двухсторонняя)Игровое кресло SecretLabИгровой автомат ChippyКаминКартина в рамке (Огромная)Карточный столКаякКитайский фонарьКоверКовер из медвежьей шкурыКомпостерКоновязь и кормушкаКостерКостер из череповКроватьМаленькая деревянная табличкаМаленькая плантацияМаленький носокМаленький тайникМалый НПЗМангалМедведь ПукиНастенный светильник из консервной банкиОгромная деревянная табличкаОгромная фоторамкаОпреснитель водыПасхальный венокПечьПортретная фоторамкаПочтовый ящикПраздничная дверная гирляндаПраздничная оконная гирляндаПугалоРамка (Большая)Рамка (Высокая)Рамка (Маленькая)Рамка (Средняя)Ремонтный верстакРождественская гирляндаРождественская елкаРождественский венокРыболовная ловушкаСамодельные полкиСветильникСнеговикСпальный мешокСредняя деревянная табличкаСтолСтол для исследованийСтол для смешиванияСтулТорговый автоматУказатель направленияУказатель направления (Двойной)Фонарь из тыквы (Злой)Фонарь из тыквы (Улыбающийся)ХолодильникШкаф для переодеванияЯщик для хранения

Я буду жить!

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

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

Говорят разработчики

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

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

В чём идея языка Rust

Автору языка нравилась скорость работы и всемогущество языка C++ и надёжность Haskell. Он поставил перед собой задачу совместить оба этих подхода в одном языке, и за несколько лет он собрал первую версию языка Rust.

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

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

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

Мультипарадигмальный значит, что в языке сочетаются несколько парадигм программирования. В случае Rust это ООП, процедурное и функциональное программирование. Причём, ООП в Rust пришло из C++, а функциональное — из Haskell. Программист может сам выбирать, в каком стиле он будет писать код, или совмещать разные подходы в разных элементах программы.

Акт номер 0xFE: Заключение

Как мне выбрать язык для своего проекта? Вы должны знать свой проект. Какова нагрузка на ваш проект? Сколько он проживёт? Сколько ему надо жить? Как долго и кто его будет поддерживать?

На самом деле – это те вопросы, на которые вам надо ответить. Если вы пишете скрипт, который вы выкинете через 2 дня, пишите его на чём попало. Главное, чтобы не в продакшин.

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

Играетесь с новым адуриноподобным устройством на ARM? Попробуйте rust! Будет весело.

Если у вас есть WEB приложение, которое должно работать на одном сервере и обслуживать 200 человек в вашей организации, то вам будет достаточно node.js. На нём писать проще. Когда компания вырастает до 2000 человек, то надо уже серьёзно подумывать про переход на шарпы или яву. Но когда аудитория сайта переваливает за 200000 человек, то мы можем говорить о переходе на rust.

Или вот, например, у вас есть docker контейнер, в котором у вас вертится микросервис написанный на Java. Этот «микросервис» занимает 200+ мегабайт места на жёстком диске. С использованием C или Rust вы могли бы это сократить до 20 мегабайт. Обновление и запихивание всего этого дела на серверы может прилично сократить трафик.

На rust написаны куски кода для Discord, Microsoft Azure IoT Engine, Open DNS, Firefox, Linux Kernel, и тд.

Для кого rust? Для суровых бородатых системных программистов, которые хотят скорости и готовы часами проектировать своё программное обеспечение с учётом потребления памяти и производительности. Написание игр или компонентов рендеринга, драйверов устройств и так далее – это удел rust.

Следует оговориться, что если вы будете работать с WebAssembly (wasm), то вам точно нужно попробовать rust. Так как код, генерируемый rust использует LLVM, а LLVM может компилировать в wasm, использовать rust для этих целей будет просто удовольствием.

Написание WEB приложения на rust это не обязательно полезная деятельность. Если вы действительно хорошо разбираетесь в системном программировании, и можете писать на С++ с закрытыми глазами, то вам стоит писать WEB на rust. Иначе, вы будете часами сидеть перед функцией, которая принимает параметры возвращаемые из формы, и горько плакать, потому что перед вами будет стоять непосильная задача распарсить эти параметры в JSON.

Гость форума
От: admin

Эта тема закрыта для публикации ответов.