Я узнал о стиль передачи продолжения , в частности асинхронная версия , реализованная в javascript, где функция принимает другую функцию в качестве последнего аргумента и создает асинхронный вызов для нее, передавая возвращаемое значение этой второй функции.
Тем не менее, я не совсем понимаю, как продолжение-передача делает что-то большее, чем воссоздание каналов (как в каналах командной строки unix)или потоков:
replace('somestring','somepattern', filter(str, console.log));
против
echo 'somestring' | replace 'somepattern' | filter | console.log
. намного чище. С конвейером кажется очевидным, что данные передаются, и одновременно выполнение передается принимающей программе. На самом деле я ожидаю, что при конвейерной передаче поток данных сможет продолжать проходить по конвейеру, тогда как в CPS я ожидаю последовательного процесса.
Возможно, можно представить, что CPS можно было бы расширить до непрерывного конвейера, если бы объект связи и метод обновления передавались вместе с данными, а не полная передача и возврат.
Я что-то упустил? Отличается ли CPS (лучше?)в чем-то важном?
Для ясности, я имею в виду передачу продолжения-, когда одна функция передает выполнение другой, а не просто обратные вызовы. CPS, по-видимому, подразумевает передачу возвращаемого значения функции другой функции, а затем выход.