Лагает или стоп кадр при попадании мне в голову на 1 сек а за 1 сек меня конечно же кончают так же зависание при открытии карты и откидует назад пк мощный I 9 13900k 1660 super 32 gb + mk 2 диск который крепится к материнке в прочем 170фпс на минималках, подскажите пожалуйста
Наглядная иллюстрация того, что может случиться с C++ программистами.
В Rust необычная схема управления памятью. Он не использует сборщик мусора, как в Java и Go, что делает его быстрым. Скорость Rust сопоставима со скоростью C.
Однако и у этой схемы есть минусы. Для того чтобы их решить, были введены умные указатели, которые дают возможность оперировать памятью на низком уровне с тем же удобством.
В статье специально использованы простейшие примеры, чтобы понять их было легче.
Типы
Box
Нужен для хранения объектов в куче, а не на стеке.
Обычно используется для рекурсивных типов, где размер объекта неизвестен во время компиляции.
Пример кода, который не будет работать.
struct Expression {
operator: Operator,
left: Expression, // Ошибка: recursive type has infinite size
right: Expression, // Ошибка: recursive type has infinite size
}
Чинится обертыванием left и right в Box.
struct Expression {
operator: Operator,
left: Box<Expression>,
right: Box<Expression>,
}
Rc
Позволяет нескольким переменным владеть одним объектом размещенным в куче.
Не работающий код.
let a = "Hello, World!".to_string();
let b = a;
let c = a; // Ошибка: use of moved value
Чтобы он заработал, добавим Rc.
let a = Rc::new("Hello, World!".to_string());
let b = Rc::clone(&a);
let c = Rc::clone(&a);
Код также будет работать если мы скопируем объект.
let a = "Hello, World!".to_string();
let b = a.clone();
let c = a;
Но прямое копирование может серьезно повредить производительности. Преимущество Rc в том, что при присваивании не создаётся новый объект, а даётся ссылка на уже существующий.
Arc
То же что и Rc, но безопасное для использования в многопоточных приложениях. Это значит, что его можно использовать из разных потоков, не боясь гонок данных.
let a = Arc::new(1);
let b = Arc::clone(&a);
let c = Arc::clone(&a);
Дороже с точки зрения производительности из-за способа подсчёта ссылок.
RefCell
Позволяет изменять данные внутри себя даже если объявлен как неизменяемый.
let a = RefCell::new(1);
*a.borrow_mut() += 1;
dbg!(a); // 2
Комбо
RefCell часто комбинируют с Rc в виде Rc<RefCell<T>>. Это позволяет каждому владельцу ссылки изменять общий объект.
let a = Rc::new(RefCell::new(1));
let b = Rc::clone(&a);
let c = Rc::clone(&a);
*b.borrow_mut() += 1;
dbg!(&a); // 2
dbg!(&c); // Тоже 2
*c.borrow_mut() += 1;
dbg!(&a); // 3
dbg!(&b); // Тоже 3
Заключение
Главное преимущество умных указателей – избегание ошибок типа segfault и выстрелов в ногу, характерных для C и C++, сохраняя при этом удобство использования.
Если статья была полезной, вас могут заинтересовать и другие статьи в моём телеграм-канале.
Я думаю, что все знакомы с играми Раст и Майнкрафт, но что будет, если их соединить?
Получится уникальный проект - RustMe
Этот проект нацелен на перенесении 1 игры во 2 соответственно, но получилось ли?
Я считаю, что да. Я поиграл на данном проекте 2 дня и мне действительно понравилось. Я очень давно искал такой проект, ведь словил игровое выгорание. Но после игры в раст ми я снова захотел играть, и даже вернулся в дзен и зарегался на пикабу.
Хочу уточнить, данная статья не является рекламой проекта, я лишь хочу поделиться очень классной находкой с вами.
Проект может подойти вам из-за цены на раст или из-за мощности компьютера, но я считаю, что даже опытным растерам эта игруха зайдет на ура.
RustMe — проект, нацеленный на перенос игры Rust в Minecraft.
Воссозданы каноничные локации Rust в комфортном масштабе: метро, нефтяные вышки, сфера, грузовой корабль, арктическая база и многие другие. Перенесены основные механики, например, стрельба с отдачей, строительство конструкциями, рейды. Для быстрого передвижения по карте реализован транспорт: мотовоз, модульные машины, снегоход, коптеры.
Если ты в игре новичок, тебе обязательно встретятся те, кто захочет легкой наживы за твой счет. Они будут пользоваться тем, что ты не можешь себя защитить и всячески насаждать тебе и твоей команде. и так может продолжаться до бесконечности... пока вы не решите дать быдлу бой...