Что такое экспа в расте

Explosives

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

КонтейнерСостояниеКоличествоВероятность
Запертый ящик с нефтяной вышки1–415 %
Элитный ящик1–23 %
Элитный ящик подводных лабораторий1–23 %
Ящик с вертолета11 %
Запертый ящик1–314 %
Бронированный ученый10.4 %

Изучен по умолчанию

Изучен по умолчанию

ИнструментТребованияВсего
Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в растеСтол для исследований Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте×500 Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте«> Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте500
Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в растеВерстак третьего уровня Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте×500 Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте«> Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте1625
ПредметКатегорияКоличествоВероятность
Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте40-мм фугасная гранатаБоеприпасы125 %
Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в растеРакетаБоеприпасы5100 %
Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в растеРакета (Зажигательная)Боеприпасы150 %
Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в растеTimed Explosive ChargeИнструменты10100 %

Раздел советов предназначен для полезной информации. Старайтесь делиться знаниями об игре и избегать простого комментирования.

Источник

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

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

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

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

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

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

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

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

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

Источник

Новая система опыта (XP System)

Содержание

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

Система уровней и опыта

Новая система опыта состоит из двух важных элементов: level и XP.

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

Level

Подробнее о праве собственности и распределению опыта на его основе читайте здесь.

Панель исследований

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

Для более удобного поиска необходимого предмета, в панели присутствует функция “поиск” (5).

После того, как вы выполнили все требования для изучения определённого предмета, выберите его и нажмите на синюю кнопку (6), после чего предмет станет доступен для создания.

Консольные команды для администраторов

С полным списком команд можно ознакомиться в статье «Консольные команды».

КомандаОписание
data.exportЭкспортирует информацию об опыте.
xp.add [Value] [Player Name / Steam ID]Добавляет определённое количество XP выбранному игроку.
Примечание: Если не вводить имя игрока, команда будет применена к вам.
xp.reset [Player Name / Steam ID]Сбрасывает уровень игрока до 1.
Примечание: Если не вводить имя игрока, команда будет применена к вам.
xp.setlevel [Value] [Player Name / Steam ID]Устанавливает определённый уровень выбранному игроку.
Примечание: Если не вводить имя игрока, команда будет применена к вам.
xp.addlevel [Value] [Player Name / Steam ID]Добавляет выбранному игроку определённое количество уровней.
Примечание: Если не вводить имя игрока, команда будет применена к вам.
xp.history [Player Name / Steam ID]Показывает XP историю игрока.
Примечание: Если не вводить имя игрока, команда будет применена к вам.
randomownerМеняет владельца предмета на случайного.
Примечание: Предмет должен находиться в первом слоте инвентаря (левый верхний угол).

Список исследуемых предметов

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

Источник

Rust — молодой и дерзкий язык программирования

Говорят, что это одновременно C++ и Haskell.

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

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

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

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

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

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

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

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

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

fn main() <
println!(«Hello, world!»);
>

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

let x = if new_game() < 4 >
else if reload() < 3 >
else

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

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

Главная особенность программ на Rust

Несмотря на синтаксис, похожий на C, главную особенность программ на Rust разработчики взяли из Haskell, и звучит она так:

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

Это значит, что программы на Rust почти так же надёжны, как программы на Haskell. Почти — потому что если программист использует «небезопасный» блок unsafe, который даёт ему прямой доступ к памяти, то в теории это иногда может привести к сбоям. Но даже с такими блоками Rust старается справляться сам и падает только в безнадёжных случаях.

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

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

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

Что написано на Rust

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

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

Источник

Чем Rust отличается от «плюсов»: откровение ветерана С++

Rust часто называют преемником C++. Дмитрий Свиридкин рассказал на суровом программистском языке, так ли хорош любимчик пользователей Stack Overflow.

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

Polina Vari для Skillbox Media

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

Программист. Разрабатывает на C++ и Rust решения для платформы компьютерного зрения в Arrival. Автор сборника материалов по C++.

Я решил попробовать Rust, потому что устал отлавливать на код-ревью (и не только) одни и те же ошибки в «плюсах». Обязательно кто-нибудь объявит статик-лямбду и захватит в неё по ссылке нестатический временный объект. А когда код с такими ошибками коммитят, он проходит тесты, предполагающие однократный запуск. Программа попадает в продакшен, где запускается пару раз и падает. На поиск и отладку багов уходит много сил и времени.

В Rust нет бардака с библиотеками

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

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

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

Например, я видел реализации std::optional, которые не вызывают деструктор, даже если тип нетривиально деструктурируемый. Тогда как стандартная реализация — это куча boilerplate-кода, который даже командой из трёх-четырёх человек невозможно отладить.

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

Чтобы писать на Rust, мне не пришлось менять IDE. Просто подключил к VS Code code-assistant rust-analyzer (это что-то вроде майкрософтовского IntelliSense). На прошлой работе писали в CLion от JetBrains. У неё есть неплохой плагин для Rust, но при рефакторинге он может наделать делов и оказать медвежью услугу. Так что IDE от JetBrains научили меня не доверять авторефакторингу — обязательно что-нибудь да сломается. Поэтому стараюсь аккуратно рефакторить сам.

Система типов в Rust защищает от ошибок

Бизнес-логика — именно то, что нужно писать на Rust, потому что с ним тяжело ошибиться. Ещё на прошлой работе мы запилили плагин — в качестве proof of concept того, что на Rust вообще можно создавать плагины к большому SDK. Логика была примитивная: принять список слов и проверить, совпадает ли с ним input.

Почему такой простой плагин? Потому что больше никто в команде не знал Rust. Язык молодой, и пока на нём мало кто пишет. Создавать проекты, которые может поддерживать только один разработчик, невыгодно. Проще найти «плюсовиков», поэтому C++ никуда не исчезнет.

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

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

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

Программы на Rust без стороннего кода сравнимы по скорости с «плюсовыми»

На прошлой работе я переписывал большой графовый алгоритм — без unsafe-кода, с контейнерами из стандартной библиотеки.

По производительности программа была всего на 10% медленнее «плюсовой». При этом обошлись без стороннего кода. Считаю, что результат хороший. Под C++ пришлось три месяца искать hashmap и перебирать варианты: в одной выравнивание как-то хитро сконфигурировано и приводит к segfault, в другом exception вылетает, если хеш плохой, третий вообще уже четыре года не поддерживается.

Что же касается бенчмарков, то всегда можно подобрать тест, где выиграет нужный язык — хоть С++, хоть Rust. Достаточно знать тонкости работы с памятью в конкретном языке. Я, например, могу написать пример кода на Rust без лишних аллокаций, а в «плюсах» у аналогичной программы они будут, потому что организовать там safe по-другому нельзя. В общем, обсуждать производительность нужно на конкретном примере.

Code-assistant rust-analyzer отлично работает с шаблонами

В последнее время я оборачиваю небезопасные библиотеки языка С, чтобы подцепиться к каноническому Rust API. Если бы сразу начал писать на «плюсах», уже давно бы закончил и общался с железом, к которому эта библиотека поставляется. А так как пишу на Rust, то пришлось целую неделю аккуратно оборачивать код в канонические Rust-структуры. Столкнулся с тонкостями системы типов: вариантностью ссылок, контравариантностью типов. Если не обращать на них внимания, то safe-обёртка над C API будет некорректной.

Оборачивать низкоуровневый unsafe-код в safe на Rust довольно долго, но оно того стоит. «Плюсовой» IntelliSense вряд ли сравнится с мощным rust-analyzer и справится далеко не со всем кодом, особенно с шаблонами.

Возможно, с появлением стандарта С++20 появятся хинты и IntelliSense научится подсказывать внутри шаблонного кода, если в параметрах указать концепт. Думаю, раньше всех эту фичу внедрит в свои IDE JetBrains — если уже не начала втихаря над ней работать. Шаблоны без концептов в «плюсах» всегда работали плохо: стоит поставить неподходящий аргумент — и компилятор выдаёт огромные сообщения об ошибках. Пока у анализаторов Rust гораздо больше возможностей, да и писать шаблонный однотипный код на нём получается гораздо быстрее.

У Rust настоящая zero-cost abstraction

Помимо Rust, я присматривался и к другим языкам. Три года назад, когда впервые сменил работу, думал погрузиться в светлый мир JVM и написать что-нибудь на Kotlin. Но языки вроде Scala, Java и Kotlin можно применять далеко не везде. Виртуальные машины создают дополнительную нагрузку и для встраиваемого ПО в микрокомпьютерах не подходят. В таких системах пишут на чистом С, С++ или совсем страшных штуках вроде MISRA C.

У Rust, скомпилированного в native, нет дополнительного рантайма. RAII, деструкторы, конструкторы как в «плюсах». Только у Rust линейные типы и zero-cost с ними настоящий, а у C++ — нетривиальный деструктор у типа, и хоть убейтесь, но не получится передать его значение через регистры.

Ещё есть Zig — он очень похож на Rust. Там, например, тоже есть проверка lifetime, но организована она иначе, и то, как это сделано в Rust, мне нравится больше. Других языков с проверкой lifetime я не знаю, а в языках со сборщиками мусора она не нужна: если есть ссылка на объект, значит, он точно живой.

В Go механизм похожий, но там есть сборщик мусора. Мне предлагали перейти на него четыре года назад. Я попробовал, и синтаксис меня рассмешил. Стоит автоформатеру неправильно перенести строки, и программа не скомпилируется. А всё из-за неявной расстановки точек с запятой.

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

В Rust более лаконичный синтаксис, но к нему нужно привыкнуть

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

Раздражает символ ; в конце expression, который меняет возвращаемый тип на аналог сишного void. Поставил точку с запятой — программа перестаёт компилироваться. А компилятор молотит type-чекером, который занимает целое ядро, чтобы rust-analyzer и IDE написали красным: «Смотри, у тебя тут типы не сошлись».

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

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

Лямбды можно писать кратко и без ключевого слова return — это экономит кучу времени. Зато когда после этого переключаешься на С++, то всё время забываешь писать return и, указав тип возврата, получаешь функции с неопределённым поведением. В С++ синтаксис лямбд вообще напоминает синтаксис обычных функций, только trailing return type сделали — ну, и на том спасибо, что уж там. А скобки и return нужно писать обязательно, иначе будете ждать от функции int, а она ничего не вернёт.

При этом Rust не панацея

Тех, кто только планирует погрузиться в Rust, предупреждаю: это не панацея от всех болячек C++. Он защищает вас от гонки данных через проверку borrow checker, но пропускает дедлоки. Защищает от use-after-free, но только в safe-подмножестве. Если же работаете с unsafe — у вас, по сути, будет тот же С++, только с более продвинутой стандартной библиотекой.

Что такое экспа в расте. Смотреть фото Что такое экспа в расте. Смотреть картинку Что такое экспа в расте. Картинка про Что такое экспа в расте. Фото Что такое экспа в расте

Хотя и здесь не всё так однозначно. Многие важные фичи, например для разработки драйверов или встроенного ПО, остаются нестабильными, а значит, писать на Rust серьёзные проекты пока рискованно. По этой причине от Rust часто отказываются в пользу C++, где всё давно stable и unsafe.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *