Domanda

Vorrei che la mia applicazione rack fosse in grado di interfacciarsi con un motore Javascript lato server.

Al momento l'unico modo in cui so che ciò potrebbe essere possibile è eseguire JRuby e Rhino sulla JVM, ma spero in una soluzione più snella.

Qualcuno ha sentito parlare di un'altra opzione, forse più rubino?

Modificare :Leggendo i commenti sto iniziando a pensare di essermi sbagliato supponendo che avere sia JRuby che Rhino in esecuzione sulla JVM implicherebbe una certa interoperabilità tra Ruby e Javascript ...?
In ogni caso non è una soluzione desiderabile per me, ma vorrei comunque chiarirlo.

È stato utile?

Soluzione

Il rubino corridore è ora fuori di pre-alfa e è in bilico da qualche parte tra alfa e beta. Ora supporta:

  • chiamando codice Ruby da JavaScript
  • chiamare funzioni JavaScript dal rubino
  • incorporare oggetti rubino nel campo di applicazione javascript.
  • lasciando oggetti rubino essere l'ambito javascript

Altri suggerimenti

  • Johnson è un RubyGem che trasforma il motore JavaScript di Mozilla SpiderMonkey in un'estensione C MRI e consente un'integrazione molto profonda tra Ruby e JavaScript,
  • c'è un forchetta di Johnson che sostituisce il motore SpiderMonkey con il motore Mozilla TraceMonkey e
  • Lyndon è come Johnson ma con JavaScriptCore invece di SpiderMonkey e MacRuby invece di MRI.

Penso di ricordare anche qualcuno che stava lavorando per incorporare il V8 con la risonanza magnetica, ma non riesco a trovare il riferimento in questo momento.

Il problema principale con Johnson è che la risonanza magnetica è un'implementazione linguistica incredibilmente scadente che perde memoria a destra e sinistra, e l'unica implementazione linguistica al mondo che potrebbe essere ancora più scadente è SpiderMonkey.Pertanto, l'elenco TODO nel repository Johnson Git non ispira esattamente fiducia;contiene solo un elemento e cito letteralmente:

Smettila di fare segfault.

Lyndon è costruito su basi molto migliori, ma ovviamente richiede l'esecuzione di OSX sul server.Inoltre, MacRuby non è ancora stato rilasciato.

Penso che JRuby+Rhino sia probabilmente l'opzione più stabile, anche se dovrai creare tu stesso l'integrazione:sono solo due implementazioni linguistiche indipendenti che vivono sulla stessa VM, ma non c'è integrazione tra loro.

Una visione diversa del problema è RKelly che è un parser JavaScript e un motore di esecuzione scritto in Ruby.

In alternativa potresti provare ad affrontare il problema da una direzione diversa:invece di mantenere la logica dell'applicazione in JavaScript ed eseguirla sia sul client che sul server, potresti mantenere la logica dell'applicazione in Ruby ed eseguirla sul server e sul client:ci sono un paio di compilatori là fuori che possono compilare (un sottoinsieme di) Ruby in JavaScript.Uno di loro lo è RubyJS.(C'è anche HotRuby, che è un interprete di bytecode YARV scritto in JavaScript, ma molto probabilmente sarebbe estremamente eccessivo per quello che stai facendo.)

E, ultimo ma non meno importante, potresti fare ciò che Rails faceva originariamente con i suoi helper JavaScript:non definisci la tua logica né in Ruby né in JavaScript, invece la definisci una volta in un Ruby DSL interno e creare sia il Rubino E Logica JavaScript da quello.

Dai un'occhiata alla The Ruby Rhino . Esso utilizza JRuby e rinoceronte per incorporare javascript nel vostro ambiente rubino. Tra le altre cose, supporta la valutazione di sicurezza, chiamando le funzioni di rubino da JavaScript e viceversa (funzioni javascript dal rubino)

C'è anche "The Ruby Racer", che incorpora v8 in risonanza magnetica. Questo è ancora molto fase di pre-alpha, ma spero di avere una versione utilizzabile a volte nel marzo del prossimo anno

Un altro motore che conosco è Snarl che utilizza anche JRuby e rinoceronte ad un effetto simile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top