Кто-нибудь когда-либо делал работу, чтобы заставить Ruby делать продолжения (например, Seaside on Smalltalk)?
Продолжение в Ruby
Ответ 1
Да, в большинстве случаев. MRI (1.8) поддерживали их, насколько моя память достигает, Ruby 1.9 (YARV) делает это тоже, так же как и Rubinius. JRuby и IronRuby не имеют продолжений, и маловероятно, что они получат их (JVM и CLR используют стекирование для защиты)
Ruby как язык поддерживает продолжение с помощью ключевого слова callcc
. Они используются, например, для реализации класса Generator
из стандартной библиотеки.
Веб-фреймворки, основанные на продолжении (например, на побережье, или один из библиотеки STD), кажутся менее популярными. Я нашел wee, которые утверждают, что позволяют делать необязательные продолжения, но я никогда не использовал его.
Ответ 2
Как уже говорили другие, Ruby 1.8 поддерживает продолжения.
Ruby 1.9 не поддерживал их некоторое время. В этом году они были добавлены обратно, но большинство других интерпретаторов Ruby (JRuby, IronRuby и т.д.) Не поддерживают их.
Если вы хотите, чтобы ваш код можно было использовать на других платформах, кроме основного Ruby, я бы предложил не использовать их.
Прочитайте эту статью InfoQ для более полного обсуждения этой темы.
Ответ 3
Btw this является примером перезапускаемых исключений (аналогичных условий), реализованных с использованием продолжений. Я использовал его несколько раз, и это круто, чтобы иметь в Ruby toolbox.
Ответ 4
neverblock использует 1,9 волокна для однопоточного рубинового веб-сервера.