Продолжение в Ruby

Кто-нибудь когда-либо делал работу, чтобы заставить Ruby делать продолжения (например, Seaside on Smalltalk)?

Ответ 1

Да, в большинстве случаев. MRI (1.8) поддерживали их, насколько моя память достигает, Ruby 1.9 (YARV) делает это тоже, так же как и Rubinius. JRuby и IronRuby не имеют продолжений, и маловероятно, что они получат их (JVM и CLR используют стекирование для защиты)

Ruby как язык поддерживает продолжение с помощью ключевого слова callcc. Они используются, например, для реализации класса Generator из стандартной библиотеки.

продолжения в ruby-doc

Веб-фреймворки, основанные на продолжении (например, на побережье, или один из библиотеки STD), кажутся менее популярными. Я нашел wee, которые утверждают, что позволяют делать необязательные продолжения, но я никогда не использовал его.

Ответ 2

Как уже говорили другие, Ruby 1.8 поддерживает продолжения.

Ruby 1.9 не поддерживал их некоторое время. В этом году они были добавлены обратно, но большинство других интерпретаторов Ruby (JRuby, IronRuby и т.д.) Не поддерживают их.

Если вы хотите, чтобы ваш код можно было использовать на других платформах, кроме основного Ruby, я бы предложил не использовать их.

Прочитайте эту статью InfoQ для более полного обсуждения этой темы.

Ответ 3

Btw this является примером перезапускаемых исключений (аналогичных условий), реализованных с использованием продолжений. Я использовал его несколько раз, и это круто, чтобы иметь в Ruby toolbox.

Ответ 4

neverblock использует 1,9 волокна для однопоточного рубинового веб-сервера.