Qual è la differenza tra asm.js e WebAssembly?

Ho letto su di asm.js e WebAssembly di recente:

http://ejohn.org/blog/asmjs-javascript-compile-target/

https://brendaneich.com/2015/06/from-asm-js-to-webassembly/

Io sono ancora confuso su un paio di cose:

  1. È asm.js il codice compilato nel tempo e eseguire? Compilato in cosa?
  2. Diverso asm.js essendo il testo e wasm (web assembly) di essere binarie, quali sono le differenze tra i 2?
  3. Che cosa significa questo per gli altri linguaggi di scripting, in esecuzione nel browser? Prendere python, per esempio, sta andando essere
    • codice python compilato per wasm? o
    • interprete python (Cpython) compilato in wasm e interpretare python?
InformationsquelleAutor NeoWang | 2015-07-19

 

3 Replies
  1. 43

    È asm.js il codice compilato nel tempo e eseguire? Compilato in cosa?

    asm.js è normale codice javascript, e viene compilato in bytecode da JS interprete, come sempre. Tuttavia, un interprete con asm di sostegno che dovrebbe fare ahead-of-time compilazione, e, eventualmente, per generare più efficiente il codice di rappresentazione per la tipizzazione statica. Vedere http://asmjs.org/ per i dettagli.

    quali sono le differenze tra asm e wasm (non di testo vs binario)?

    Nessuno, per ora. wasm dovrebbe essere compatibile, compilabile asm (che a sua volta è eseguibile come normale JS). Potrebbe tuttavia essere esteso con ulteriori caratteristiche in futuro, come il supporto per esso cresce.

    Che cosa significa questo per gli altri linguaggi di scripting, in esecuzione nel browser?

    Quest’ultimo, piuttosto, come Python ha ancora bisogno di essere interpretato. Linguaggi di Scripting che non ha bisogno di un interprete, naturalmente, possono essere compilati direttamente a (w)asm, dato che c’è un compilatore (catena) che sostiene come destinazione.

    • Paio di note. La prima parte della tua risposta mi sembra un po ‘ ambigua; sembra che stai dicendo che asm.js sarebbe compilare AOT in una efficienti “bytecode”. In realtà, le implementazioni non hanno per bersaglio un bytecode, e infatti molti di destinazione nativo ISA direttamente e AOT (che è un po ‘ il punto, davvero). Puoi anche dire “compilabile per asm e js”. Si potrebbe desiderare di chiarire che volevi dire “assembly nativo” o qualcosa del genere. O forse volevi dire “asm.js e js”, ma che non è troppo utile, dal momento che uno è un sottoinsieme dell’altro.
    • Grazie per il feedback, spero di essere riuscito a risolvere i problemi – non esitate a (suggeriscono) modifica di te, sarei grato. Giusto, ero un po ‘ lassista sul efficienti “bytecode” come non conoscevo l’esatta compilazione di architettura, dopo tutto ISA è solo un altro “byte code” che viene interpretato dal processore. Si prega di perdonare la terminologia imprecisa 🙂
  2. 48

    asm.js è un sottoinsieme di JS con “altamente ottimizzabile” istruzioni per l’uso. Fondamentalmente si può dichiarare il tipo (int, float) e il js motore (nel browser, ma anche la node.js uno) esegue le istruzioni più veloce. Ha vantaggi se la tua applicazione fa un sacco di calcolo o di grafica, se utilizzato insieme con WebGL.

    web assemblea è un formato binario per JS, tutti JS, non solo asm.js. Non è un bytecode, è una codifica binaria dell’AST che l’analizzatore calcola. Dispone di 2 grandi vantaggi:

    • JS motore può saltare la fase di analisi
    • è molto più compatto rispetto al JS fonte originale

    Siamo già in grado di scrivere codice per i browser che non è JS: EMSCripten possibile compilare il codice c++ in codice JS. Altre transcompiler sono già disponibili per compilare il codice in JS.
    Utilizzando asm.js il codice può essere eseguito più velocemente quando si fa la matematica.
    Utilizzo di web assembly che il codice sarà più compatta e il browser sarà in grado di elaborare più velocemente (perché sarà in grado di saltare l’analisi).
    Non avrete un nuovo plugin per caricare come DirectX, JavaApplets, Flash o Silverlight, perché tutto verrà eseguito in JS sandbox.

    • Salta l’analisi? Rallentare, c’. Il supporto Hardware è la mappa per il prossimo futuro. Quello che vuoi dire è che l’analisi è diventato il collo di bottiglia con asm.js e wasm correzioni con un efficiente formato binario. Il razionale per l’asm.js/wasm sembra un po ‘ minimalista, ma questo va bene. Puntelli per indicare il bytecode != AST.
    • WASM non è un formato binario per JS. Si utilizzerà la stessa Api web come JS, ma è molto più portatile e generalizzata di JS. L’unico binario formati per JS, o di bytecode, sono quelle svolte nel browser, come Firefox da qui: developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/…
  3. 19

    È asm.js il codice compilato nel tempo e eseguire? Compilato in cosa?

    Diversi browser compilare asm.js codice in diversi modi. Come di agosto 2015:

    • Firefox compila asm.js in codice macchina (e memorizza il codice macchina per carichi futuri della stessa asm.js) [Uno].
    • In Windows 10 in via sperimentale, bandiera, Bordo anche fare un po ‘ in Anticipo la convalida e la compilazione di asm.js [Due].
    • Chrome appositamente riconosce “l’uso asm” direttiva all’inizio del asm.js per analizzare e analizzare il codice più avidamente e tweak compilazione euristica.
    • Safari non fa nessun trattamento speciale di asm.js.

    Diverso asm.js essendo il testo e wasm (web assembly) di essere binarie, quali sono le differenze tra i 2?

    asm.js è solo JavaScript e quindi deve comportarsi esattamente secondo il JavaScript spec. Come un nuovo standard, WebAssembly è in grado di risolvere alcuni casi particolari in cui un comportamento JavaScript non è l’ideale (da una performance o una compilation prospettiva) [Tre]. In futuro [Quattro], WebAssembly sarà in grado di aggiungere funzionalità che altrimenti sarebbe difficile esprimere in JavaScript.

    Che cosa significa questo per gli altri linguaggi di scripting, in esecuzione in
    browser? Prendere python per esempio, sarà

    • codice python compilato per wasm? o
    • interprete python (Cpython) compilato in wasm e interpretare python?

    Nel v. 1, il modo più semplice per eseguire Python in un browser sarà quello di compilare un interprete Python per wasm, come hai detto tu. Questo significa, ad esempio, Python GC è in esecuzione in wasm codice e manuale di gestione del wasm memoria lineare. Vi è già stato un progetti sperimentali per aggiungere un asm.js backend di PyPy [Cinque] (che potrebbe funzionare altrettanto bene per wasm). Attualmente corre in limitazioni di asm.js che può essere affrontato con la il collegamento dinamico caratteristica futuro di wasm. Andando oltre, wasm mira a fornire sia GC integrazione e Compilazione JIT supporto di consentire la più efficace e naturale integrazione con la piattaforma Web.

Lascia un commento