async / await
От: Denom Украина  
Дата: 30.03.11 11:15
Оценка:
Маросы для async / await никто не планирует делать?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re: async / await
От: hardcase Пират http://nemerle.org
Дата: 30.03.11 11:37
Оценка: 12 (2) +2
Здравствуйте, Denom, Вы писали:

D>Маросы для async / await никто не планирует делать?


Зачем? Есть ComputationExpression.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: async / await
От: _nn_ www.nemerleweb.com
Дата: 30.03.11 11:55
Оценка: 1 (1)
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Denom, Вы писали:


D>>Маросы для async / await никто не планирует делать?


H>Зачем? Есть ComputationExpression.


Добавлю, что есть статья про ComputationExpression.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: async / await
От: BogdanMart Украина  
Дата: 30.03.11 15:36
Оценка:
Здравствуйте, Denom, Вы писали:

D>Маросы для async / await никто не планирует делать?


Ну асинк есть в стандартной билиотеке.. а что такое await не знаю
Re[2]: async / await
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.03.11 21:34
Оценка:
Здравствуйте, BogdanMart, Вы писали:

D>>Маросы для async / await никто не планирует делать?


BM>Ну асинк есть в стандартной билиотеке.. а что такое await не знаю


Аналог defcomp из той библиотеки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: async / await
От: Denom Украина  
Дата: 12.05.11 10:31
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Denom, Вы писали:


D>>Маросы для async / await никто не планирует делать?


H>Зачем? Есть ComputationExpression.


Ну все-таки, несмотря на внешнее сходство, они отличаются реализацией и кодом на выходе.

Computation expressions — превращаются в вызовы Bind, Return и т.д. у соотв билдера + генерируются объекты замыканий.
А async/await генерируют state machine как enumerable с yield, и в точках await вставляются вызовы методов класса Awaiter.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[3]: async / await
От: hardcase Пират http://nemerle.org
Дата: 12.05.11 12:21
Оценка:
Здравствуйте, Denom, Вы писали:

D>Ну все-таки, несмотря на внешнее сходство, они отличаются реализацией и кодом на выходе.


D>Computation expressions — превращаются в вызовы Bind, Return и т.д. у соотв билдера + генерируются объекты замыканий.

D>А async/await генерируют state machine как enumerable с yield, и в точках await вставляются вызовы методов класса Awaiter.

Дело в том, что C# команде было проще приспособить уже готовый код построителя автомата состояния "yield".
/* иЗвиНите зА неРовнЫй поЧерК */
к
Re[4]: async / await
От: Denom Украина  
Дата: 13.05.11 07:59
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Дело в том, что C# команде было проще приспособить уже готовый код построителя автомата состояния "yield".


Ок. У Липперта была серия постов, почему сделали именно так. Но на выходе меньше кода и он проще. Да и с сериализацией меньше проблем. Насколько реально сериализовать состояние продолжений на основе ComputationExpressions (Для нужд веб фреймворка)?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[5]: async / await
От: hardcase Пират http://nemerle.org
Дата: 13.05.11 12:54
Оценка:
Здравствуйте, Denom, Вы писали:

D>Насколько реально сериализовать состояние продолжений на основе ComputationExpressions (Для нужд веб фреймворка)?


Без понятия, я в тот код нос не сувал. Об этом лучше WolfHound-а трясти.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: async / await
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.05.11 14:18
Оценка:
Здравствуйте, hardcase, Вы писали:

D>>Насколько реально сериализовать состояние продолжений на основе ComputationExpressions (Для нужд веб фреймворка)?


H>Без понятия, я в тот код нос не сувал. Об этом лучше WolfHound-а трясти.


Он говорил, что без проблем. Но одно дело говорить, а другое сделать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: async / await
От: dsorokin Россия  
Дата: 14.05.11 07:57
Оценка:
Здравствуйте, Denom, Вы писали:

D>Насколько реально сериализовать состояние продолжений на основе ComputationExpressions (Для нужд веб фреймворка)?


Может понадобиться поддержка со стороны компилятора Nemerle. Такая поддержка есть частично в F#. Технические подробности ниже.

Макрос comp создает много замыканий. Они преобразовываются в коде на IL в большое количество маленьких объектов. Если вычисление comp во внутреннем представлении опирается на эти замыкания, то для сериализации такого вычисления нужно, чтобы представляющие замыкания объекты были сериализуемыми.

Например, компилятор F# для замыканий автоматически добавляется атрибут Serializable, если есть такая возможность. Но есть исключения. По-моему важное исключение — последовательности (мне сейчас не понятно — почему).

Что касается async, то нужно действительно спрашивать у WolfHound. У него особая реализация непохожая на другие. В F# используются продолжения, и там необходимы сериализуемые замыкания для сериализации самого асинхронного вычисления (что, видимо, не всегда возможно ??). WolfHound придумал свой собственный метод, но полагаю, что сериализуемые замыкания нужны и там тоже.

Так получается уже три разных способа реализации async. Другие два из C# и F#.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.