Как стать автором
Обновить

Комментарии 21

Читается сложновато конечно. А автоматически к итератору кастить совсем никак в Rust? Только в лоб писать?

Имеется в виду упразднение iter()? Можно вместо этого амперсанд писать, но я привык так, т.к. кажется несколько более читабельным (вопрос привычки).

Т.е. вместо

for item in items.iter(){...} можно писать for item in &items {...}

Аналогично вместо iter_mut() - &mut

Я правильно понял вопрос?

Да, в C++ как-то проще выглядит for (Type i : Iterable)

Ключевой момент в том, чтобы амперсанд добавлять (или iter()). Иначе цикл будет потреблять элементы массива.

Это очень крутое отличие Rust от С++ и языков со сборщиком мусора, которое позволяет не париться с памятью - концепция владения. Рекомендую изучить, если не знакомы. Как освоил её и почувствовал её плюсы, просто влюбился в этот язык.

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

Это не совсем аналогично.

iter первичен, а вот итерация по &items вторична.

Конечно коллекции всё реализуют для удобства пользования.

«If a collection type C provides iter(), it usually also implements IntoIterator for &C, with an implementation that just calls iter(). Likewise, a collection C that provides iter_mut() generally implements IntoIterator for &mut C by delegating to iter_mut(). This enables a convenient shorthand:»

https://doc.rust-lang.org/std/iter/

Верно, спасибо за уточнение.

Тут просто возникает вопрос "а к какому из них кастить?". iter/ iter_mut / into_iter - соотвественно иммутабельная ссылка, мутабельная ссылка, поглощающий итератор - значения контейнера будут перемещены. А если тут какой-нибудь кастомный итератор по странной структуре, то как его кастить если ты забыл какой-нибудь IterMut ему прописать?

Так у каждого каста есть своя сигнатура:

for item in items {...} // into_iter()
for item in &items {...} // iter()
for item in &mut items {...} // iter_mut()

Из-за чего разночтений быть не может.

Я в курсе. Речь про автоматическую дедукцию, сигнатуры, как комментатор выше спрашивал.

for (mut commands) in commands_query.iter_mut() {
	if check_in_progress(&commands)	{
		continue;
	}
	set_current_command(&mut commands_query);
}

Такие штуки просто замечательно писать через всякие filter / map / for_each, чтобы количество вложенности уменьшать. Код выше превращается во что-то такое.

commands
  .iter_mut()
  .filter(|com| !check_in_progress(com))
  .for_each(set_current_command);

Спасибо за рекомендацию. Выглядит куда более Rust-friendly, пока не привык к такому стилю. Но буду понемногу вводить его для себя.

Rust-friendly,

"Идиоматичнее", наверное хотели сказать. В общем на производительность такое никак не повлияет и можно жить и с циклами, но чтобы уменьшить цикломатическую сложность - то что доктор прописал. В некоторых ситуациях можно даже параллелизм прикрутить, но вам оно пока вроде не сильно нужно, т.к. bevy под капотом вроде что-то похожее проворачивает.

Задача на параллелизм уже лежит в бэклоге, возьмусь как только, так сразу)
Учитывая мою склонности ко вложенности из-за разных приятных решений вроде pattern matching и if let Some(), лишний раз подчистить код - не помешает.

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

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

Я слишком "под-пивасный" разработчик для такого. Тем не менее видео позабавило, т.к. в некоторых фразах узнал себя, когда другим этот язык рекламировал)

Во, красота. Мне так и показалось, что иначе должно выглядеть. У меня на Python примерно также выходит, если код выглядит громоздко и неразборчиво, значит это на самом деле C++, С# или Java под маской питона. А когда pythonic way, то сразу красота.

Кстати, это интересная мысль про то, что это один язык под маской другого. Я так пытался в прошлом сделать пет-проект по геймдеву, но использовал андроидовскую Clean Architecture с MVVM, а не тот же ECS.

Очень двойственные чувства были: с одной стороны вроде привычно всё и понятно, а с другой как-то слишком громоздко, неудобно и неповоротливо.

Почему почти все "игры для программистов" считают, что программистам очуметь как нравится писать простые императивные команды?

Честно скажу, если бы мне на работе пришлось целыми днями писать все эти "start.server(); take_money_from_client(10); look_data();", я бы давно выкатился из айти. Единственные места где я использую такие команды это баш и гит, да и те заменяются скриптами и алиасами чтобы быть одной строчкой.

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

Потому что работа большинства современных программистов очень далека от этого.

Но тем не менее все продолжают писать такие игрушки без особого успеха.

Главная фишка геймплея как раз в том, чтобы писать функции и процессы, которые будут автоматизировать эту рутину. Ну а интерес в этом деле - понятие субъективное, т.к. немало людей заинтересованы игрой, играют в демку в стиме и добавили в вишлист.

Далее про "игру для программистов": это, по сути, тег, который вешают на игры, которые требуют каких-либо навыков программирования (или развивают их). С таким же успехом можно докопаться про игры c тегом roguelike, в которых нет мошенников (rogue) и не рассказывается про то, почему они могут нравится (like).

И напоследок, про ЦА. Я провёл исследование (не отрицаю, что выборка не самая большая, но всё же), которое показало, что люди с опытом 5+ лет не заинтересованы в том, чтобы писать код после работы, чтобы играть в какую-то игру. Однако люди, которые хотят научиться программировать или только учатся, довольно тепло восприняли эту концепцию и с удовольствием играли.

Кстати могу порекомендовать игру Software Inc., там конечно не про работу программиста, а скорее руководства, но многие моменты довольно привычными и реалистичными показались.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий