Pergunta
Alguém já fez trabalho para chegar Ruby para fazer continuações (como Mar em Smalltalk)?
Solução
Sim, na maioria dos casos. MRI (1,8) apoiaram-los, tanto quanto meus alcances de memória, Ruby 1.9 (YARV) isso também , o mesmo acontece com Rubinius. JRuby e IronRuby não têm continuações, e é muito improvável que eles vão buscá-los (JVM e CLR uso pilha-introspecção para segurança)
Ruby como uma linguagem suporta continuações através de palavras-chave callcc
. Eles são usados, por exemplo, para implementar classe Generator
da biblioteca padrão.
baseado em continuação frameworks web (como à beira-mar, ou um de std. Biblioteca de Arc) parecem menos popular. Eu encontrei wee que pretendem deixá-lo fazer continuações opcionais, mas eu nunca usei.
Outras dicas
Como outros já disse, Ruby 1.8 suporta continuações.
Ruby 1.9 não apoiou-los por um tempo no entanto. Eles foram adicionados de volta algum tempo este ano, mas a maioria dos outros intérpretes Ruby (JRuby, IronRuby, etc) não apoiá-los.
Se você quiser que o seu código para ser usado em outras plataformas que não a linha principal Ruby, eu sugiro que não usá-los.
Leia este artigo InfoQ para uma mais discussão abrangente sobre o tema.
este é um exemplo de exceções reinicializáveis ??( aka condições) implementado usando continuações. Eu usei-o algumas vezes e é uma coisa legal para ter em uma caixa de ferramentas Ruby.
neverblock usa 1,9 fibras por um único servidor de rosca ruby ??web