Продолжения и сопрограммы в Scala

Вопрос у меня про эти два понятия (ну чтобы не было недопониманий): continuation и coroutine.

Я знаю про плагин для ограниченных продолжений в scala, но возможно он устареет к версии 2.11, да и сейчас уже не поддерживается более года и имеет неисправленные баги. В scala-internals Мартин Одерски высказался за то, чтобы подумать о реализации продолжений с помощью макросов, т.к. сейчас у них нет ресурсов для поддержки плагина, да и вообще он имеет фундаментальные изъяны.

Меж тем эти две концепции крайне желаемы сообществом. А например jetty или netty (не помню) использует реализацию продолжений на java от apache, которая работает с байткодом. И есть тесты, которые показывают 10-ти кратный прирост производительности по сравнению с реализацией без продолжений.

В связи с этим мне интересно, ведется ли какая-либо работа в данном направлении? Может кто-то слышал. Или что-то уже реализованно в каких-то библиотеках.

Дело в том, что у меня есть идеи по поводу того, как можно реализовать ограниченные продолжения и сопрограммы в scala с помощью макросов. Причем по удобству использования сопрограммы не будут уступать аналогам из python или php.
Проблема в том, что я пока не достаточно изучил собственно макросы. Поэтому реализация может занять несколько месяцев. А к тому моменту может оказаться, что «всё уже сделано до нас».

В общем этот вопрос о целесообразности данной работы в целом и о возможности с кем-то обуждать концепции, чтобы в дальнейшем можно было предложить подобную реализацию для включения в стандартную библиотеку scala, т.к. моей компетенции может не хватать для соответствия стандартам, принятым в самой scala.

ps: забыл сказать ещё, что по идее с помощью продолжений можно будет сделать перезапуски по типу как в ruby
  • Вопрос задан
  • 3486 просмотров
Пригласить эксперта
Ответы на вопрос 2
CheatEx
@CheatEx
Инженер
Перенёс в уточнения
Ответ написан
Комментировать
romik
@romik

Есть ещё http://docs.scala-lang.org/sips/pending/async.html (и, соответственно, https://github.com/scala/async). Вероятно вы его видели, просто не упомянули в вопросе. Это не совсем continuations, но, насколько я понимаю, выполняемую этим макросом трансформацию можно использовать и как основу для них.

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы