Хочу сделать что-то типа континюэшенов, только которые сериализуюся и сохраняются на диск.
Но как сделать передачу управления внутри метода? goto в Немерле нет (или я просто не могу найти), а с неймед блоком не могу понять, как работать, и можно ли добиться чего-то похожего.
Здравствуйте, Flem1234, Вы писали:
F>Хочу сделать что-то типа континюэшенов, только которые сериализуюся и сохраняются на диск.
F>Но как сделать передачу управления внутри метода? goto в Немерле нет (или я просто не могу найти), а с неймед блоком не могу понять, как работать, и можно ли добиться чего-то похожего.
match(__state)
{
|1 =>
WriteLine("Раз");
__state++; // save;
// Тут сериализация и выход
|2 => WriteLine("Два");
}
Здравствуйте, Flem1234, Вы писали:
F>Но как сделать передачу управления внутри метода? goto в Немерле нет (или я просто не могу найти), а с неймед блоком не могу понять, как работать, и можно ли добиться чего-то похожего.
Nemerle так делает, когда генерирует код для yield. Но я вам не покажу, как он это делает, потому что не могу найти трансформацию в самом коде Nemerle.
VladD2 говорил, что yield вполне мог бы быть макросом, а это означает, что для реализации продолжений возможностей неймед-блоков должно хватить.
Здравствуйте, catbert, Вы писали:
C>Nemerle так делает, когда генерирует код для yield. Но я вам не покажу, как он это делает, потому что не могу найти трансформацию в самом коде Nemerle.
В любом случае этот код не для слабонервных.
А оператор Goto можно легко эмулировать с помощью TExpr.Goto (но это граничит с хаком).
Здравствуйте, VladD2, Вы писали:
VD>С ComputationExpression не ясно как сохранять и восстанавливать состояние.
Изучи как устроен Async. Там все сделано. Только сериализации нет.
В принципе если его допилить так чтобы его можно было сериализовать то будет все что нужно.
Теоритически это должно быть не сложно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
VD>>С ComputationExpression не ясно как сохранять и восстанавливать состояние. WH>Изучи как устроен Async. Там все сделано. Только сериализации нет. WH>В принципе если его допилить так чтобы его можно было сериализовать то будет все что нужно. WH>Теоритически это должно быть не сложно.
В теории, теория и практика эквивалентны, на практике — нет.
ЗЫ
Если сделать сериализацию состояния и клонирование, то можно сделать офигительный ворквлоу. На его основе можно будет очень легко реализовывать сайты с логикой визарда и поддержкой возврата назад/вперед. Ну, и много чего.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Хм, а можешь раскрыть тему? Я не могу понять, есть ли получение и работа с контекстом выполнения в Computation Expressions. В каком классе это происходит?