то, что в формальной модели, ф-ция func "ждет" результатов вычисления f(arg), g(arg). А следующая ф-ция, будет ждать исполнения всего этого выражения. И т.д. Каждая ф-ция обязана возвращать результат вызову, она не может асинхронно отправить что-то куда-то стороннему шедуллеру, арбитру и пр.
пффф. ну так речь и идёт лишь о том, что в ФП усилены возможности к распараллеливанию, но они не безграничны естественно!
но в императивщине как раз вы не можете даже это расспараллелить:
Код:
func(f(arg),g(arg))
потому что нет никаких гарантий, что f и g не пересекаются. В императивном подходе вообще такой возможности нет!
а в ФП - есть. Сразу же. Если чистое.
Речь же не о том что всё возможно, а о том что появляются логичные и определенные возможности.
Но и естественно, что поток вычисления ограничен сразу же. И если вы перечитаете мой первый пост в теме, то заметите, что модель:
Код:
var (key, new_world) = input_key( world );
сразу же вовлекает что? =))))))
действительно обязательство передавать new_world в функции ниже сразу же "стягивает" поток вычисления конкретными узами.
т.е. попытка "имитировать стейт" приводит к тому, что.... возникают те же проблемы что у стейта!
логично?