Отличается ли стиль передачи продолжения от пайпа?

Я узнал о стиль передачи продолжения , в частности асинхронная версия , реализованная в javascript, где функция принимает другую функцию в качестве последнего аргумента и создает асинхронный вызов для нее, передавая возвращаемое значение этой второй функции.

Тем не менее, я не совсем понимаю, как продолжение-передача делает что-то большее, чем воссоздание каналов (как в каналах командной строки unix)или потоков:

replace('somestring','somepattern', filter(str, console.log));

против

echo 'somestring' | replace 'somepattern' | filter | console.log

. намного чище. С конвейером кажется очевидным, что данные передаются, и одновременно выполнение передается принимающей программе. На самом деле я ожидаю, что при конвейерной передаче поток данных сможет продолжать проходить по конвейеру, тогда как в CPS я ожидаю последовательного процесса.

Возможно, можно представить, что CPS можно было бы расширить до непрерывного конвейера, если бы объект связи и метод обновления передавались вместе с данными, а не полная передача и возврат.

Я что-то упустил? Отличается ли CPS (лучше?)в чем-то важном?

Для ясности, я имею в виду передачу продолжения-, когда одна функция передает выполнение другой, а не просто обратные вызовы. CPS, по-видимому, подразумевает передачу возвращаемого значения функции другой функции, а затем выход.

17
задан Community 23 May 2017 в 11:56
поделиться