Potresti ottenere prestazioni migliori codificando un'applicazione in C, quindi compilare JavaScript? [chiuso]

0

Sto scrivendo un interprete per un linguaggio di programmazione funzionale che verrà eseguito nel browser. Inutile dire che le prestazioni sono l'unica preoccupazione in questa applicazione. Emscripten è un compilatore LLVM → JavaScript che afferma di produrre programmi eseguiti solo 2 ~ 3 volte più lentamente di quelli nativi. È davvero sorprendente, considerando che le applicazioni JavaScript effettive tendono a essere da 7 a 10 volte più lente di quelle native, secondo il Computer Benchmarks Game. E quelli sono esattamente i tipi di applicazioni di cui sono preoccupato.

Quindi, detto questo, sarebbe proficuo codificare la mia applicazione in C, e poi compilarla in JavaScript usando asm.js, o c'è qualcosa che mi manca?

    
posta MaiaVictor 20.06.2014 - 21:43
fonte

1 risposta

3

Il tuo approccio proposto è il seguente:

  1. Codifica il tuo interprete in C.
  2. Compilare la C in Javascript usando Emscripten o asm.js.
  3. Esegui Javascript utilizzando (credo) un'implementazione JavaScript residente nel browser.

(Se l'implementazione di Javascript non è residente al browser, allora non vedo il punto di Javascript. Compilare la C direttamente nel codice nativo sarà più veloce.)

Hai postulato che (basato sulle affermazioni dei sostenitori di Emscripten / asm.js), questo ti darebbe un interprete più veloce di quello che avresti codificato direttamente in Javascipt.

Ora potrebbe essere vero che un C - > L'applicazione Javascript è più veloce di una tipica versione Javascript scritta a mano di un'applicazione C. Ma quando ci pensi, se gli strumenti in grado di generare javascript che funzionano velocemente, allora qualcuno che capisce come scrivere javascript ottimizzato dovrebbe essere in grado di scrivere codice che funzioni altrettanto velocemente. In effetti, potrebbero persino essere in grado di fare meglio, soprattutto se si prendono il tempo necessario per tracciare e personalizzare il javascript.

E come sottolineato dai commenti, se prendi il C - > Javascript route non sarà pratico per ottimizzare il Javascript generato.

Ma in realtà si riduce a quanto tu stai scrivendo Javascript ... rispetto a ciò che questi strumenti genereranno da un codice ipotetico C che non lo ha anche stato scritto ancora. Nessuno può darti una risposta che sia definita e credibile.

Ma penso che il tuo quadro generale sia un po 'fuori strada:

Needless to say, performance is the one and only concern in this application.

Questo è miope. Ci sono altre preoccupazioni; cioè velocità di codifica, facilità di debug, manutenibilità, portabilità e ... correttezza. E in effetti, questi dovrebbero essere presi in considerazione per la scelta del metodo di implementazione.

E il rovescio della medaglia è che se la performance dell'interprete è veramente la tua unica preoccupazione, allora forse dovresti implementarla in C, compilare direttamente il codice nativo e spedirlo come un plug-in nativo. O implementare un compilatore per il tuo linguaggio funzionale piuttosto che un interprete.

    
risposta data 21.06.2014 - 05:37
fonte

Leggi altre domande sui tag