Вопрос
Кто-нибудь когда-нибудь работал над тем, чтобы заставить Ruby делать продолжения (например, Seaside на Smalltalk)?
Решение
Да, в большинстве случаев.MRI (1.8) поддерживал их, насколько я помню, Ruby 1.9 (YARV) делает ли это тоже, как и Рубиниус.У JRuby и IronRuby нет продолжений, и маловероятно, что они их получат (JVM и CLR используют stack-instrospection для обеспечения безопасности)
Ruby как язык поддерживает продолжения через callcc
ключевое слово.Они используются, например, для реализации Generator
класс из стандартной библиотеки.
Веб-фреймворки на основе продолжения (например, seaside или один из std от Arc.библиотека) кажутся менее популярными.Я нашел крошка это утверждает, что позволяет вам выполнять необязательные продолжения, но я никогда им не пользовался.
Другие советы
Как уже говорили другие, Ruby 1.8 поддерживает продолжения.
Однако Ruby 1.9 некоторое время не поддерживал их.Они были добавлены некоторое время назад в этом году, но большинство других интерпретаторов Ruby (JRuby, IronRuby и т.д.) Их не поддерживают.
Если вы хотите, чтобы ваш код можно было использовать на других платформах, кроме основного Ruby, я бы посоветовал не использовать их.
Читать эта информационная статья для более всестороннего обсуждения этой темы.
Кстати это является примером перезапускаемых исключений (они же условия), реализованных с использованием продолжений.Я использовал его несколько раз, и это классная штука для использования в Ruby toolbox.
neverblock использует 1.9 волокон для однопоточного веб-сервера ruby