2015-01-16 15 views
12

Se è così, allora potrei lasciare che le persone giochino con un mio progetto cambiando la sua configurazione (Haskell): ricompilandola nel browser e quindi eseguendone di nuovo nel browser. Non mi importa della velocità. Voglio solo essere in grado di dimostrare un progetto fondamentalmente difficile da configurare nel browser. Quindi i nuovi utenti possono vedere se gli piace, in pochi secondi e senza configurazione.Can GHCJS/Haste si possono compilare?

Che bello sarebbe!

da quello che ho letto, GHCJS compila STG in JavaScript. dice che usa l'API GHC, quindi dovremmo essere in grado di compilarlo anche in JavaScript, come qualsiasi altra libreria Haskell. (giusto?) È vero che, mentre il runtime di GHC ha un sacco di C, il compilatore stesso è puro Haskell?

così:

  1. Può GHCJS stessa compilare in Javascript?
  2. Can Haste si può compilare in JavaScript?
  3. È stato fatto uno di questi? (È così che funziona http://haste-lang.org/try/? Sembra che sia necessaria una rete.)
+0

Le estensioni non dovrebbero essere un problema per nessuno di questi, non credo. Entrambi afferrano le cose da un linguaggio intermedio di GHC. Credo che il supporto delle biblioteche sia una preoccupazione più grande. – dfeuer

+0

davvero. https://github.com/valderman/haste-compiler dice che supporta ogni estensione tranne Template Haskell. btw, cosa intendi per supporto bibliotecario? –

+2

Le librerie che fanno affidamento su C FFI di GHC non funzioneranno. Come ricordo, il supporto di Haste per la programmazione parallela e concorrente è piuttosto limitato, mentre quello di GHCJS no. A quanto ho capito, il principale vantaggio di Haste su GHCJS è che produce codice compilato compatto, che è particolarmente importante in un ambiente browser. Ma non ho mai usato personalmente * entrambi * di loro. – dfeuer

risposta

11

GHCJS e Haste entrambi, a mia conoscenza, sfruttano direttamente GHC. GHC, sebbene principalmente haskell, è legato a una buona quantità di cbit in termini di tempo di esecuzione e di funzionamento. Sono abbastanza sicuro che nessuno dei due possa, al momento, essere compilato per funzionare direttamente nel browser in modalità "self-hosted".

Tuttavia, Fay, che è un "dialetto Haskell-like" di JS può essere compilato tramite GHCJS, che è piuttosto elegante (https://github.com/ghcjs/ghcjs-examples/tree/master/fay-hello) anche se forse non è quello che vuoi.

Un'altra alternativa, se il sistema è abbastanza semplice, è utilizzare emscripten per inserire hugs nel browser e consentire agli utenti di giocare con quello.

Come si intuisce, i vari "Try it nel browser" tutti i siti effettivamente utilizzare una connessione a macchine, tipicamente in esecuzione qualcosa di simile mueval che in realtà esegue il codice dato.

+0

grazie. Il mio caso d'uso è di prendere qualsiasi progetto che metto su hackage, con estensioni GHC arbitrarie (non FFI) (quindi senza Fay), e avere una demo lenta/limitata che può essere ricompilata nel browser. sarebbe bello non dover pagare per i server per ricompilare quel codice o preoccuparsi della sicurezza. sebbene da quello che ho letto, mueval sembra molto solido. –

+2

Non vedo come si rapporta realmente il runtime di GHC. GHCJS e Haste producono codice che non usa affatto il solito runtime di GHC. – dfeuer

+0

@dfeuer right, tutti i "cbits" dovrebbero essere JavaScript in ghcjs. ma non ho studiato GHC, ed è come su 100k loc, quindi forse ci sono alcune dipendenze implicite da typechecking/codegen sul runtime. –