@happy_bracket Пока я ресёрчил аргументы в пользу своей точки зрения (кстати, я так и не понял, как мне в ФП добиться structured concurrency), я наткнулся на видео Венката, который объясняет это гораздо лучше, чем я бы смог:
https://www.youtube.com/watch?v=QYBRifsWHD0.
Вот он говорит то же, что и я про паралелизм
https://youtu.be/QYBRifsWHD0?t=2302. Справедливости ради, и циклы можно параллелить. Но есть огромная книга "Optimizing compilers for modern architectures", которая посвящена только теме паралеллизации императивного кода (то есть, в основном попытке понять, когда код можно параллелить или векторизовать, когда нет). Это я называю безумием. Там, где можно обойтись вызовом parallel, пишутся огромные тома.
Вот где он переходит на асинхронность:
https://youtu.be/QYBRifsWHD0?t=2697. Слайда заключительного нет, но понятно, что там будет что-то типа "Structure of asynchronous imperative code is similar to structure of synchronous imperative code".
Ырыкс (и цепочка из flatMap, приправленная сахарком) хорош ровно до тех пор, пока нет ветвлений или циклом. Тогда не важно, как пайплан писать. Но только стоит делать асинхронно что-то сложное, так императивный код, который выглядит так же, как и синхронный - это манна небесная и при чтении кода и при написании. Добавил сюда cancellation и... Скажу сразу, не удивлюсь, если какой-нибудь аспирант сейчас пишет дисер на тему cancellation in FP.
Это два абсолютно разных стиля, оба со своими плюсами и минусами. Я не говорю, что на ФП нельзя писать асинхронщину, я говорю, что её писать не так удобно, как в императивщине. Так же, пример с распараллеливанием императивщины и необходимости использования полихедральщины для понимания, можно ли вообще параллелить в любом более-менее сложном случае, тогда как ФП с его иммутабельностью делают распаралелливание не проблемой, говорит не о том, что в императивщине нельзя писать паралельные программы. Просто это не так удобно.