Ligações de rubi para um mecanismo JavaScript do lado do servidor?
-
22-09-2019 - |
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.
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.