Вы неправильно используете clone() в Rust

clone() в Rust часто появляется в коде в тот момент, когда borrow checker снова «мешает просто дописать фичу». Компилятор успокаивается, задача закрывается, но в проекте постепенно накапливаются лишние копирования, аллокации и API, которые требуют владения там, где хватило бы ссылки. В статье разберём типичные места, где clone() используют как затычку: от Vec и String до замыканий, HashMap и многопоточного кода.

https://habr.com/ru/companies/otus/articles/1029174/

#Rust #clone #borrow_checker #владение #заимствование #аллокации #производительность #HashMap #Arc #Rc

Вы неправильно используете clone() в Rust

Материал подготовлен в рамках курса «Rust-разработчик. Продвинутый уровень» . Когда borrow checker не пропускает код, самое простое решение: добавить .clone() . Компилятор доволен, код работает....

Хабр

Rust의 소유권 모델로 해석하는 엔지니어링 매니지먼트 타입 시스템

Rust의 빌림 검사기(Borrow Checker) 개념을 엔지니어링 매니지먼트에 대입하여 조직 내 권한과 책임을 정의하는 타입 시스템을 제안한다.

🔗 원문 보기

Rust의 소유권 모델로 해석하는 엔지니어링 매니지먼트 타입 시스템

Rust의 빌림 검사기(Borrow Checker) 개념을 엔지니어링 매니지먼트에 대입하여 조직 내 권한과 책임을 정의하는 타입 시스템을 제안한다.

Ruby-News | 루비 AI 뉴스

[Перевод] Может, если бы у C++ было больше времени, он стал бы лучше?

В своей предыдущей статье [ перевод на Хабре] я говорил о множестве недостатков C++, которые, по сути, устранил Rust. Благодаря этому код теперь легко использовать правильно и сложно использовать неверно. Я не говорил о безопасности по памяти, просто привёл пример того, что пользователь функции не может случайно поменять местами аргументы количества и цены. На написание статьи меня вдохновил доклад Мэтта Годболта о том, как можно сделать интерфейсы C++ более надёжными: Correct by Construction: APIs That Are Easy to Use and Hard to Misuse . Вам стоит его посмотреть! В той статье я сказал, что Rust гораздо лучше помогает разработчику, возможно, благодаря тому, что у него были десятки лет, чтобы учиться. В конце концов, первая версия C++ была выпущена в начале 80-х, а Rust — в начале 2010-х. Если дать C++ несколько десятков лет для обучения, то, разумеется, появятся новые структуры, которые будут обладать высоким качеством и которые сложно использовать неправильно. Но так ли это?

https://habr.com/ru/articles/913702/

#владение #borrow_checker #изменяемое_состояние

Может, если бы у C++ было больше времени, он стал бы лучше?

В своей предыдущей статье  [ перевод на Хабре] я говорил о множестве недостатков C++, которые, по сути, устранил Rust. Благодаря этому код теперь легко использовать правильно и сложно...

Хабр

[Перевод] Почему я отказался от разработки игр на Rust, часть 4

Часть 1 Часть 2 Часть 3 Dynamic borrow checking вызывает неожиданные вылеты после рефакторинга В процессе написания статьи я обнаружил ещё один случай вылета нашей игры из-за пересекающегося World::query_mut . Я работаю с hecs уже около двух лет, такие проблемы — это не тривиальные «ой, я случайно сделал вложенными два запроса», с которыми сталкиваешься, только начав работать с библиотекой. Скорее, это ситуация, когда одна часть кода, находящаяся на верхнем уровне, запускает выполняющую что-то систему, а затем независимая часть кода делает что-то простое с ECS где-то глубоко внизу; после крупномасштабного рефакторинга они неожиданно оказываются пересекающимися. Такое у меня случается не впервые; обычно советуют такое решение: «твой код просто плохо структурирован, поэтому ты сталкиваешься с такими проблемами; необходимо его отрефакторить и спроектировать правильно». Спорить с такими аргументами довольно сложно, потому что по сути своей они правдивы — это происходит, потому что какие-то части кодовой базы спроектированы неоптимально. Проблема в том. что это ещё один случай, когда Rust вынуждает делать рефакторинг там, где бы этого не требовал никакой другой язык. Пересекающиеся архетипы — не всегда преступление, и ECS-решения не на основе Rust (например, flecs ) вполне их допускают. Но эта проблема возникает не только в ECS. У нас она много раз возникала при использовании RefCell<T> , когда два .borrow_mut() создают пересечение и вызывают неожиданный вылет. Дело в том, что это не всегда вызвано «плохим кодом». Люди говорят, что обойти эту проблему можно, «выполняя заимствование на кратчайшее время», но за это приходится расплачиваться. Очевидно, что это тоже зависит от правильного структурирования кода, но, как мы уже определили, геймдев — это не разработка серверов, а код в нём не всегда организуется оптимальным образом. Иногда в коде может быть цикл, которому нужно использовать что-то из RefCell , и бывает очень логично расширить заимствование на весь цикл, а не заимствовать только там, где это необходимо. Если цикл достаточно большой и вызывает систему, которой та же ячейка может понадобиться где-то ещё (обычно для условной логики), то это способно сразу создать проблему. Кто-то снова может сказать «просто используй косвенность и выполняй условную логику через событие», но в таком случае мы снова идём на компромисс: геймплейная логика не будет двадцатью строками понятного читаемого кода, а окажется разбросанной по всей кодовой базе.

https://habr.com/ru/articles/813597/

#rust #borrow_checker #borrowing #игровые_движки #unity

Почему я отказался от разработки игр на Rust, часть 4

Часть 1 Часть 2 Часть 3 Dynamic borrow checking вызывает неожиданные вылеты после рефакторинга В процессе написания статьи я обнаружил ещё один случай вылета нашей игры из-за пересекающегося...

Хабр

[Перевод] Почему я отказался от разработки игр на Rust, часть 1

Предисловие: этот пост представляет собой очень длинный перечень мыслей и проблем, возникавших у меня за годы работы; также в нём рассматриваются некоторые из аргументов, которые мне часто говорили. В посте выражено моё мнение, сформировавшееся у меня в процессе разработки игр на Rust в течение многих тысяч часов на протяжении многих лет и после множества завершённых игр. Это не хвастовство и не показатель успеха, я просто хочу сказать, что вложил достаточно много усилий в Rust; здесь не получится сказать «когда наберёшься опыта, тебе всё станет понятно». Пост не будет ни научной оценкой, ни A/B-исследованием. Это моё личное мнение после разработки игр на Rust маленькой инди-командой (два человека) в попытках заработать достаточно денег, чтобы финансировать процесс. Мы не одни из тех разработчиков с бесконечными финансами от инвестора и многолетним запасом времени. Если вы находитесь в этой категории и получаете удовольствие от многолетней разработки систем, то всё написанное ниже к вам не относится. Я рассматриваю всё с такой точки зрения: «Мне хочется создать игру максимум за 3-12 месяцев, чтобы люди могли сыграть в неё, а я — немного заработать». Статья не написана с точки зрения «Я хочу изучить Rust, а разработка игр — это весело», хотя это и вполне нормальная цель; просто она никак не согласуется с тем, чего хотим мы — заниматься разработкой игр коммерчески успешным и самодостаточным образом. Мы выпустили несколько игр на Rust, Godot, Unity и Unreal Engine, и многие люди сыграли в них в Steam. Мы создали с нуля собственный игровой 2D-движок с простым рендерером, а также в течение нескольких лет использовали Bevy и Macroquad во многих проектах, некоторые из которых были очень нетривиальными. Кроме того, я бэкенд-разработчик на полную ставку и пишу код на Rust. Этот пост — не какое-то поверхностное мнение после изучения нескольких туториалов или разработки небольшой игры для геймджема. За три с лишним года мы написали сильно больше ста тысяч строк кода на Rust. Задача этого поста — развеять популярные и часто повторяемые аргументы. Но это всё-таки субъективное мнение; по большей части я написал пост, чтобы не объяснять снова и снова одно и то же. Пусть это будет справочный материал о том, почему мы, скорее всего, откажемся от Rust как от инструмента для разработки игр. Мы ни в коем случае не планируем прекращать создавать игры, просто не будем делать это на Rust.

https://habr.com/ru/articles/811163/

#rust #borrow_checker #ecs #entitycomponentsystem #игровые_движки

Почему я отказался от разработки игр на Rust, часть 1

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

Хабр