Pregunta

Me gustaría que mi solicitud de rack para ser capaz de interactuar con un motor de JavaScript del lado del servidor.

A partir de ahora la única manera de que esto podría ser posible, es mediante la ejecución de JRuby y Rhino en la JVM, pero estoy esperando una solución más ligera.

¿Alguien ha oído hablar de otra, más rubyish tal vez, la opción?

Edit: La lectura de los comentarios que estoy empezando a pensar que he sido assumig errónea de que tienen tanto JRuby y Rhino se ejecutan en la JVM implicaría cierta interoperabilidad entre Ruby y JavaScript ...
? Eso no es una solución deseable para mí de todos modos, pero aún así me gustaría aclarar eso.

¿Fue útil?

Solución

The Ruby Racer está ahora fuera de pre-alfa y se cierne en algún lugar entre alfa y beta. Ahora soporta:

  • código de llamada rubí de JavaScript
  • llamadas a funciones JavaScript de rubí
  • incrustación de rubí objetos en el alcance javascript.
  • dejar objetos rubí ser su alcance javascript

Otros consejos

  • Johnson es una rubygem que convierte el motor Mozilla SpiderMonkey JavaScript en una extensión MRI C y permite muy profunda integración entre Ruby y JavaScript,
  • tenedor de Johnson que sustituye al motor SpiderMonkey con el motor de Mozilla TraceMonkey y
  • Lyndon Johnson es como pero con JavaScriptCore en lugar de SpiderMonkey y MacRuby en lugar de resonancia magnética.

Creo También recuerdo a alguien trabajando en la incorporación de V8 con resonancia magnética, pero no puedo encontrar la referencia en este momento.

El principal problema de Johnson es que la RM es una implementación del lenguaje increíblemente horrible que pierde memoria a izquierda y derecha, y la única implementación del lenguaje en el mundo que podría ser aún más chungo es SpiderMonkey. Por lo tanto, la lista de cosas pendientes en el repositorio Git Johnson no inspira mucha confianza; que sólo contiene un elemento, y cito literalmente:

  

Detener volviendo loco violación de segmento.

Lyndon está construido sobre una fundación mucho mejor, pero es evidente que requiere la ejecución de OSX en el servidor. Además, MacRuby no se ha publicado todavía.

Creo JRuby + Rhino es probablemente la opción más estable, aunque se tiene que construir la integración a sí mismo: son sólo dos implementaciones de lenguajes independientes que pasan a vivir en la misma máquina virtual, pero no hay integración entre ellas <. / p>

Una opinión diferente sobre el problema es RKelly que es un motor de analizador y la ejecución de JavaScript escrita en Ruby.

Como alternativa, se podría tratar de abordar el problema desde una dirección diferente: en lugar de mantener su lógica de la aplicación en JavaScript y en funcionamiento que tanto en el cliente y el servidor, se podría mantener su lógica de la aplicación en Ruby y ejecutar que en el servidor y el cliente: hay un par de compiladores por ahí que puede compilar (un subconjunto de) Ruby a JavaScript. Uno de ellos es RubyJS . (También hay HotRuby , que es un intérprete de código de bytes YARV escrito en JavaScript, pero que sería muy probable ser enorme excesivo para lo que está haciendo.)

Y por último pero no menos importante que podría hacer lo Carriles originalmente hizo con sus ayudantes JavaScript: ni definir su lógica en Ruby ni JavaScript, en lugar de definirlo una vez en una interna Rubí DSL y generar tanto el Rubí y lógica de JavaScript de eso.

Para consultar El Rinoceronte Rubí . Utiliza jruby y Rhino para incrustar javascript en su entorno de rubí. Entre otras cosas, es compatible con la evaluación de seguridad, llamar a las funciones de rubí desde JavaScript y vice-versa (javascript funciones de rubí)

También hay "The Ruby Racer" que incrusta v8 en la RM. Esto es todavía muy pre-alfa de fase, pero espero tener una versión en algún momento utilizable en marzo del próximo año

Otro motor que conozco es Gruñido que también utiliza jruby y el rinoceronte de un efecto similar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top