Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Читать эта информационная статья для более всестороннего обсуждения этой темы.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top