O código asm.js é compilado a tempo e executado? Compilado em quê?
Navegadores diferentes compilam o código asm.js de maneiras diferentes. Em agosto de 2015:
- O Firefox compila asm.js em código de máquina (e armazena em cache o código de máquina para carregamentos futuros do mesmo asm.js) [ 1 ].
- No Windows 10 como um sinalizador experimental, o Edge também fará alguma validação Ahead-of-Time e compilação de asm.js [ 2 ].
- O Chrome reconhece especialmente a diretiva "use asm" no início do asm.js para analisar e analisar o código com mais atenção e ajustar as heurísticas de compilação.
- O Safari não faz nenhum processamento especial de asm.js.
Além de asm.js ser texto e wasm (web assembly) binário, quais são as diferenças entre os 2?
asm.js é apenas JavaScript e, portanto, deve se comportar exatamente de acordo com as especificações do JavaScript. Como um novo padrão, o WebAssembly é capaz de corrigir alguns casos em que o comportamento do JavaScript não é o ideal (de uma perspectiva de desempenho ou compilação) [ 3 ]. No futuro [ 4 ], WebAssembly será capaz de adicionar recursos que de outra forma seriam difíceis de expressar em JavaScript.
O que isso significa para outras linguagens de script em execução no navegador? Pegue o python, por exemplo, vai ser
- código python compilado para wasm? ou
- interpretador python (Cpython) compilado em wasm e interpretar python?
No v.1, a maneira mais simples de executar Python em um navegador será compilar um interpretador Python para o wasm, como você disse. Isso significa, por exemplo, que o Python GC está sendo executado no código wasm e gerenciando manualmente a memória linear do wasm. Já houve um projeto experimental para adicionar um backend asm.js ao PyPy [ 5 ] (que poderia funcionar tão bem para o wasm). Atualmente, ele apresenta limitações do asm.js que poderiam ser resolvidas pelo futuro recurso de vinculação dinâmica do wasm. Indo mais longe, o wasm busca fornecer integração GC e suporte de compilação JIT, ambos permitindo uma integração mais eficiente e natural com a plataforma da web.