Pergunta

Eu gostaria que meu aplicativo rack pudesse interface com um mecanismo JavaScript do lado do servidor.

A partir de agora, a única maneira de saber que isso poderia ser possível é executar Jruby e Rhino na JVM, mas espero uma solução mais magra.

Alguém já ouviu falar de outro, mais rubi, opção?

EDIT: Lendo os comentários Estou começando a pensar que fui enganado, assumindo que Jruby e Rhino funcionem na JVM implicaria alguma interoperabilidade entre Ruby e JavaScript ...?
Essa não é uma solução desejável para mim de qualquer maneira, mas ainda assim eu gostaria de esclarecer isso.

Foi útil?

Solução

O piloto de rubi agora está fora de pré-alfa e está pairando em algum lugar entre alfa e beta. Agora suporta:

  • Chamando o código Ruby do JavaScript
  • Chamando JavaScript Functions de Ruby
  • Incorporar objetos de rubi no escopo JavaScript.
  • Deixando objetos de rubi ser Seu escopo JavaScript

Outras dicas

  • Johnson é um rubygem que transforma o mecanismo JavaScript Mozilla Spidermonkey em uma extensão de ressonância magnética e permite uma integração muito profunda entre Ruby e JavaScript,
  • existe um Fork de Johnson que substitui o motor Spidermonkey pelo motor Mozilla Tracemonkey e
  • Lyndon é como Johnson, mas com JavaScriptCore em vez de Spidermonkey e Macruby em vez de ressonância magnética.

Acho que também me lembro de alguém que trabalha na incorporação do V8 com a ressonância magnética, mas não consigo encontrar a referência agora.

O principal problema com Johnson é que a ressonância magnética é uma implementação de idiomas incrivelmente ruim que vaza a memória para a esquerda e a direita, e a única implementação de idiomas no mundo que poderia ser ainda mais ruim é Spidermonkey. Assim, a lista TODO no Repositório Johnson Git não inspira exatamente confiança; Ele contém apenas um item, e eu cito literalmente:

Pare de enlouquecer.

Lyndon é construído com uma base muito melhor, mas obviamente exige executar o OSX no servidor. Além disso, Macruby ainda não foi lançado.

Eu acho que o Jruby+Rhino é provavelmente a opção mais estável, embora você tenha que criar a integração: são apenas duas implementações de idiomas independentes que vivem na mesma VM, mas não há integração entre eles.

Uma visão diferente do problema é Rkelly que é um analisador JavaScript e um mecanismo de execução escrito em Ruby.

Como alternativa, você pode tentar abordar o problema de uma direção diferente: em vez de manter sua lógica de aplicativo em JavaScript e executando isso no cliente e no servidor, você pode manter sua lógica de aplicativo em Ruby e executá -lo no servidor e no servidor e no Cliente: Existem alguns compiladores por aí que podem compilar (um subconjunto de) rubi para JavaScript. Sobre eles está Rubyjs. (Há também Hotruby, que é um intérprete de bytecode yarv escrito em JavaScript, mas isso provavelmente seria um exagero tremendo para o que você está fazendo.)

E por último, mas não menos importante uma vez em um Ruby DSL interno e gerar ambos o rubi e Lógica JavaScript disso.

Dê uma olhada em O rinoceronte rubi. Ele usa Jruby e Rhino para incorporar JavaScript em seu ambiente de rubi. Entre outras coisas, apóia a avaliação segura, chamando funções de rubi de JavaScript e vice-versa (funções JavaScript da Ruby)

Há também "The Ruby Racer", que incorpora o V8 na ressonância magnética. Ainda é uma fase pré-alfa, mas espero ter uma versão utilizável em março do próximo ano

Outro motor que conheço é o SNARL, que também usa Jruby e Rhino para um efeito semelhante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top