Всем привет!
В 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. Сериализовать состояние таких объектов стандартными методами и в последствии восстанавливать это состояние.
Если есть смельчаки готовые взяться за данную задачу, то я (и думаю, другие читатели этого форума) готов оказать содействие.