LINUX.ORG.RU

[Схема/Лисп] continuations - это костыль?


0

1

Навеяно недавним обсуждением монад здесь на ЛОРе. Один активный лиспер пытался убедить некоторых хаскеллистов в том, что монады - это костыль. Известно, что continuations довольно широко используются в схеме. В связи с этим возник вопрос, а может быть и continuation чистой воды костыль? Интересно узнать, что думает ЛОРовское сообщество и в особенности уважаемые лисперы.

Итак, continuation passing style - это костыль или все же абстракция?

З.Ы. На самом деле вопрос непростой. Он возник у меня после сегодняшнего прочтения статьи «The essense of functional programming» by Philip Wadler. Иногда открываешь для себя такие удивительные вещи!

З.З.Ы. И причем здесь монады?..

★★★★★

я думаю, не просто костыль, а целые грабли

Love5an
()

Продолжения - это круто. С помощью них можно лабать stateful приложеня для веба, и флагман в этом деле - фреймворк Seaside, правда для Смолтока. Лисповский UnCommonWeb ваяют глядя на него и с теми же целями

yoghurt ★★★★★
()

>что continuations довольно широко используются в схеме

В SML/NJ имеются, например. И вроде в других реализациях. Поскольку в SML/NJ нет такой прозы жизни как стек вызовов, работает это быстро.

Хотя, call/сс, тот же самый комбинаторный стиль программирования, только вид сбоку.

Macil ★★★★★
()
Ответ на: комментарий от yoghurt

>Я знаю, кэп. В том то и фишка Seaside, что оно STATEFUL.

Очередная глупая попытка спрятать все за фреймворком. Не нужно. Это как с PHP и SQL запросами, от которых зачем-то пытаются избавится и находят массу костылей.

anonymous
()

>continuation passing style - это костыль или все же абстракция

Так 'style' же. Точно не абстракция.

DonkeyHot ★★★★★
()
Ответ на: комментарий от anonymous

Это у тебя домашняя страничка stateless, а большинство реальных web-сайтов stateful.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Продолжения

> Что в них костыльного?

Это Love5an надо спрашивать. Для него монады - костыль. Следовательно, продолжения - тоже. Впрочем о последних он прямо написал :)

dave ★★★★★
() автор топика
Ответ на: комментарий от jtootf

За ссылки спасибо. Выходит, не я один совсем недавно открыл для себя продолжения. Да и то в процессе прочтения Expert F#...

dave ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

> фреймворк Seaside, правда для Смолтока

Спасиб, что напомнил о Смолтоке. К моему списку изучения добавился и он. А есть что-нибудь наподобии SICP или RWH? Можно и на инглише.

dave ★★★★★
() автор топика
Ответ на: комментарий от Miguel

> Да continuations - это, считай, те же монады, вид сбоку. Техника местами полезная.

А чем определяется выбор в пользу того или иного? Или все решается тем, язык статически типизированный или нет? Хотя если продолжение завернуть в монаду, то скорее всего не будет хвостовой рекурсии, поскольку появится дополнительный слой.

dave ★★★★★
() автор топика
Ответ на: комментарий от dave

Библией Смолтокеров считается т.н. Blue Book - Smalltalk-80: The Language and its Implementation By Adele Goldberg and DavidRobson. По своей «матанности» этой книге далеко до SICP, но тут это и не надо)) В недопереведенном на русский язык варианте оно лежит вот тут.

Среди прочих полезных на практике книг можно отметить Sqeak by example, Smalltalk by example. Есть ещё Smalltalk Best Practice Patterns Кента Бека, эт свод т.н. паттернов, как «правильно» писать на языке

Эти книги (кроме Бека) и многие другие лежат тут: http://stephane.ducasse.free.fr/FreeBooks/

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Спасибо. Очень полезная страничка. Осталось только со временем определиться.

dave ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

>Лисповский UnCommonWeb ваяют глядя на него и с теми же целями

скорей уж наоборот, ucw лет 10 уже, но он давно мертв, или в агонии, сейчас из фреймворков на лиспе, использующих продолжения можно выделить weblocks

Продолжения - это круто. С помощью них можно лабать stateful приложеня для веба,

это круто, но часто абсолютно ненужно, к тому же в случае веба может сильно проблем добавить

cvb
()
Ответ на: комментарий от cvb

continuations - вещь довольно полезная с точки зрения выразительности языка. С моей точки зрения, это всё же абстракция, а не костыль. Например, в проекте screamer они (т.е., их эмуляция, т.к. в CL в прямом виде их нету) используются для добавления в лисп недетерминизма. Но мне не совсем ясно, насколько их возможно реализовать эффективно, будь то машинные коды или трансляция на какие-нибудь модные машины типа JVM.

В случае веба, кстати, продолжения - это вещь довольно естественная. Мы отправляем запрос на сервер и привешиваем к нему функцию (замыкание), которое будет вызвано по ответу на этот запрос. Можно было бы это оформить в виде использования продолжения, тогда замыкание бы не понадобилось.

den73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.