Очень интересная задачка - макрос Continuation
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.09 19:29
Оценка:
Всем привет!

В Scala 2.8 появился плагин к компилятору который позволяет превратить любой класс Scala в Continuation (продолжение).

Support for continuations. A compiler plugin will support continuations as an optional feature of Scala, using a type-directed continuation passing transform. Continuations are useful to implement advanced control constructs, for instance for asynchronous I/O, user interface event handling, or dataflow concurrency.


Данная задача так же может быть решена в виде макроса Немерле. Подобный вид сontinuation-ов был бы очень полезен в работе. Такие вещи как воркфлоу, визарды, логика перемещения по сайту, реализацию эффективных итераторов по сложным структурам данных (например, по деревьям) и многое другое может делаться на них очень элегантно.

Общая идея очень проста. Берем код класса и переписываем его так, чтобы вместо вызовов реальных методов (с передачей параметров через стек) параметры помещались бы в некую специализированную структуру данных аналогичную стеку а управление просто передавалось бы в нужную точку программы. При этом так же нужно записывать последовательность возвратов. Это позволит:
1. Останавливать такие объекты в безопасных точках (а-ля yield).
2. Запускать такие объекты с того места на котором они были остановлены.
3. Клонировать такие объекты в некотором состоянии и потом запускать как клоны, так и сами объекты.
4. Сериализовать состояние таких объектов стандартными методами и в последствии восстанавливать это состояние.

Если есть смельчаки готовые взяться за данную задачу, то я (и думаю, другие читатели этого форума) готов оказать содействие.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.