Re: Continuation Passing Style

oleg_mcp

Нет ли у кого хороших статей/книг по этому делу? Лучше на примере функциональных языков, поскольку с императивными и так более-менее понятно.

Chupa

"An Operational Semantics for I/O in a Lazy Functional Language"
ftp://ftp.cl.cam.ac.uk/papers/adg/fpca93.ps.gz

rosali

Ну давай теперь рассказывай! А то книжки читать не охота, а поподробнее узнать охота...

rosali

"An Operational Semantics for I/O in a Lazy Functional Language"

А это точно про то? А то по названию показалось, что это про манады...

Chupa

Чувак строит отношения эквивалентности
между различными подходами к в/в, в т.ч. CPS.
Про монады там нет.

Papazyan

По простому это вычисления функций без возврата. Т.е. вместо того, чтобы выполнять return мы вызываем так называемое continuation, которое нам передали в параметрах. Ну и сами, когда вызываем подфункцию, передаем ей остаток текущей функции в качестве continuation. В этих continuation сохраняется контекст вычисления и мы, если нужно, можем прервать текущее вычисление и вернуться назад, как при использовании longjump, или даже в другую ветку. Так получается, что не нужен стек. Есть даже какой-то язык типа Stackless Python или Perl.
В императивных языках это понятно как происходит, а в функциональных не очень.

sergey_m

По простому это вычисления функций без возврата. Т.е. вместо того, чтобы выполнять return мы вызываем так называемое continuation, которое нам передали в параметрах.
Ох, ниибаца. Помню я несколько дней такое делал на perl и чуть с ума не сошел. Такой прикольный монстр вышел, сам факт его работы удивлял.

Marinavo_0507

squid видел?
там CPS в чистом виде
(это я про версию 2)
довольно трудно прослеживать последовательность операций

Marinavo_0507

А вот такая штука.
В случае функционального языка у компилятора вроде вполне достаточно информации,
чтобы преобразовывать co-routines (которые как правило удобнее писать человеку) в CPS
(что удобнее исполнять компьютеру). А вот на практике этого как добиться?
"В сях" люди как правило треды вводят для этого дела, с соответствующим оверхедом.

oleg_mcp

Я не в курсе. Я пытаюсь пока понять, реализацию CPS на Haskell. Я скачал документ с объяснениями для Scheme, но я его не знаю и поэтому все равно не понятно.
Оставить комментарий
Имя или ник:
Комментарий: