пуле?
В смысле распараллелить итерацию?
а там кстати только параллельные итераторы? параллельного for нету?
есть параллельный .for_each() параллельный for сделать нельзя, потому что for это сахар уровня языка для вполне конкретного цикла
С процедурными макросами наверное можно и параллельный for? :) Но это конечно шутка, мне без разницы, какой синтаксис, лишь бы ленивость не мешала
процедурные макросы тут дадут все недостатки .for_each() без каких-либо достоинств в частности, принципиально нельзя рассахарить процедурным макросом вот такую конструкцию #[par] for _ in x { return; } потому что она участвует в control flow вне тела цикла
(на самом деле можно, наверное, если рассахаривать return в бросок и ловлю паники, считая, что у нас включён unwind и что внутри цикла нет catch_unwind)
не обязательно можно представить себе задачу (например, поиск нужного числа в большом массиве чисел по некоторому предикату), для которой «делать больше итераций» в целом ок, и тогда нужная семантика return будет такой, как я описал
Но теперь нам придётся даункастить панику в данные, и придётся проверять что все ретёрны возвращают один и тот же тип.
да, хотя мы можем попытаться выплюнуть рядом с остальным кодом какие-нибудь статические ассерты
паника даже не нужна, ControlFlow ftw, но синхронизация всё равно замороченная будет...
можно, да, если не завязываться на интерфейс .par_for_each()
но наивное рассахаривание всё равно не выйдет
(я, кстати, не помню, что делает .par_for_each(), если в нём запаниковать)
останавливает внутренние треды «в ближайшее время» и паникует наверх что произойдёт, если оба запаникуют, я не уверен
да, тут нужно что-то вроде .par_try_for_each
Обсуждают сегодня