Продолжения в Ruby - PullRequest
       9

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

12 голосов
/ 29 сентября 2008

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

Ответы [ 4 ]

12 голосов
/ 29 сентября 2008

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

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

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

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

6 голосов
/ 29 сентября 2008

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

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

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

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

2 голосов
/ 24 декабря 2009

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

1 голос
/ 29 октября 2008

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

...