Комментарии 6
Обучать Расту людей это хорошее и доброе дело, при всём моём неприятии рекламы всё же общее впечатление о статье положительное.
«Rust предлагает хорошие решения к задачам многопоточности. В Rust нет места таким распространенным проблемам, как гонки данных…»
Ну нельзя же так над родным языком издеваться. Сначала подумал что это chat GPT нагенерил, он у него вроде поскладнее выходит.
Нет проблемы гонки данных, так как данные не гоняются.
Если пишите в официальном блоге, так хоть литературу посмотрите не предмет устоявшейся терминологии.
Стоит ещё упомянуть такие способы синхронизации как Multiple/Single Producer Multiple/Single Consumer (aka mpsc, broadcast, oneshot, watch). Вместо разделения доступа к данным, данные можно просто передавать между потоками по "каналу"
let even_nums: Vec<_> = nums.par_iter().filter(|&&x| x % 2 == 0).collect();
А зачем тут двойной амперсанд?
потому что там двойное заимствование окажется. Одно от итератора, второе от потока, судя по всему. Чтобы внутри лямбды работать со значениями, а не со ссылками явным образом обозначаем сигнатуру, а дальше сахаратор языка самостоятельно сделает разыменование до значения. Либо можно сделать это ручками
|x| **x % 2 == 0
Но если функция окажется сложнее и значение x понадобиться несколько раз, то придётся каждый раз разыменовывать.
Как-то смешались в кучу кони люди. Статья должна быть о параллелизме тогда, а не о многопоточности. Ну и про Arc всего лишь крошечный абзац, а про Send/Sync так и вовсе ничего не рассказали. Про каналы, как способ общения между тредами тоже ноль.
Основы многопоточности в Rust