WebAssembly

WebAssembly
Paradigma
Surgido em março de 2017 (7 anos)
Criado por
Influenciada por
Plataforma Multiplataforma
Licença Licença Apache 2.0
Extensão do arquivo
  • .wat (formato texto)
  • .wasm (formato binário)
Página oficial webassembly.org

WebAssembly (às vezes abreviado como Wasm) é um padrão aberto que define um formato de código binário portátil para programas executáveis e uma linguagem assembly textual correspondente, bem como interfaces para facilitar as interações entre esses programas e seu ambiente hospedeiro.[2][3][4][5] O principal objetivo do WebAssembly é habilitar aplicativos de alto desempenho em páginas web, mas o formato é projetado para ser executado e integrado em outros ambientes também, incluindo os autônomos.[6][7][8]

WebAssembly (ou seja, WebAssembly Core Specification (então a versão 1.0, 1.1 está em rascunho[9]) e WebAssembly JavaScript Interface[10]) tornou-se uma recomendação do World Wide Web Consortium em 5 de dezembro de 2019,[11] junto com HTML, CSS e JavaScript.[12]

WebAssembly pode suportar (pelo menos em teoria) qualquer linguagem (por exemplo, compilada ou interpretada) em qualquer sistema operacional (com a ajuda de ferramentas apropriadas),[13] e na prática todas as linguagens mais populares já têm pelo menos algum nível de suporte.

O Emscripten SDK pode compilar qualquer código-fonte escrito em linguagens suportadas por LLVM (como C, C++ ou Rust, entre outras) em um arquivo binário que é executado na mesma sandbox como código JavaScript.[nota 1] Emscripten fornece ligações para várias interfaces de ambiente comumente usadas, como WebGL. Não há acesso direto ao Document Object Model (DOM); entretanto, é possível criar funções proxy para isso, por exemplo através de stdweb,[18] web_sys,[19] e js_sys[20] ao usar a linguagem Rust.

As implementações do WebAssembly geralmente usam compilação ahead-of-time (AOT) ou just-in-time (JIT), mas também podem usar um interpretador. Embora as implementações atualmente mais conhecidas possam ser em navegadores web, também existem implementações sem navegador para uso geral, incluindo WebAssembly Micro Runtime,[21] um projeto da Bytecode Alliance (com o subprojeto iwasm code VM suportando "interpretador, compilação ahead-of-time (AoT) e compilação Just-in-Time (JIT)"[22]), Wasmtime,[23] e Wasmer.[13]

O World Wide Web Consortium (W3C) mantém o padrão com contribuições da Mozilla, Microsoft, Google, Apple, Fastly, Intel, e Red Hat.[24][21]

  1. «WebAssembly/design/Semantics.md». GitHub (em inglês). Consultado em 23 de fevereiro de 2021. WebAssembly code can be considered a structured stack machine; a machine where most computations use a stack of values, but control flow is expressed in structured constructs such as blocks, ifs, and loops. In practice, implementations need not maintain an actual value stack, nor actual data structures for control; they need only behave as if they did so. 
  2. «Introduction — WebAssembly 1.0». webassembly.github.io. Consultado em 18 de junho de 2019. WebAssembly is an open standard... 
  3. «Introduction — WebAssembly 1.0». webassembly.github.io. Consultado em 18 de junho de 2019. WebAssembly is a ... code format 
  4. «Conventions — WebAssembly 1.0». webassembly.github.io. Consultado em 17 de maio de 2019. WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure. 
  5. «Introduction — WebAssembly 1.0». webassembly.github.io. Consultado em 18 de junho de 2019. ... this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. These will each define a WebAssembly application programming interface (API) suitable for a given environment. 
  6. «Introduction — WebAssembly 1.1». webassembly.github.io. Consultado em 19 de fevereiro de 2021. Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well. 
  7. Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 de junho de 2017). «Bringing the Web Up to Speed with WebAssembly». SIGPLAN Notices. 52 (6): 185–200. ISSN 0362-1340. doi:10.1145/3140587.3062363. While the Web is the primary motivation for WebAssembly, nothing in its design depends on the Web or a JavaScript environment. It is an open standard specifically designed for embedding in multiple contexts, and we expect that stand-alone implementations will become available in the future. 
  8. Erro de citação: Etiqueta <ref> inválida; não foi fornecido texto para as refs de nome :1
  9. «WebAssembly Specification — WebAssembly 1.1». webassembly.github.io. Consultado em 22 de março de 2021 
  10. «WebAssembly JavaScript Interface». www.w3.org. Consultado em 24 de junho de 2020 
  11. World Wide Web Consortium. «WebAssembly Core Specification». World Wide Web Consortium (W3). Consultado em 9 de dezembro de 2019 
  12. Couriol, Bruno. «WebAssembly 1.0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers». infoq.com. Consultado em 9 de dezembro de 2019 
  13. a b Erro de citação: Etiqueta <ref> inválida; não foi fornecido texto para as refs de nome Wasmer
  14. «Developer's Guide - WebAssembly». webassembly.org. Consultado em 10 de junho de 2019 
  15. «Compiling a New C/C++ Module to WebAssembly». MDN Web Docs (em inglês). Consultado em 10 de junho de 2019 
  16. «Building to WebAssembly — Emscripten 1.38.33 documentation». emscripten.org. Consultado em 10 de junho de 2019 
  17. «Emscripting a C library to Wasm | Web». Google Developers (em inglês). Consultado em 10 de junho de 2019 
  18. «stdweb - Rust». docs.rs. Consultado em 5 de junho de 2019. The goal of this crate is to provide Rust bindings to the Web APIs and to allow a high degree of interoperability between Rust and JavaScript. 
  19. «web_sys - Rust». docs.rs. Consultado em 5 de junho de 2019. Raw API bindings for Web APIs. This is a procedurally generated crate from browser WebIDL which provides a binding to all APIs that browser provide on the web. 
  20. «js_sys - Rust». docs.rs. Consultado em 5 de junho de 2019. Bindings to JavaScript's standard, built-in objects, including their methods and properties. 
  21. a b Erro de citação: Etiqueta <ref> inválida; não foi fornecido texto para as refs de nome bytecode
  22. «bytecodealliance/wasm-micro-runtime». Bytecode Alliance. 19 de fevereiro de 2021. Consultado em 19 de fevereiro de 2021 
  23. «Wasmtime — a small and efficient runtime for WebAssembly & WASI». wasmtime.dev. Consultado em 18 de dezembro de 2020 
  24. Erro de citação: Etiqueta <ref> inválida; não foi fornecido texto para as refs de nome ars


Erro de citação: Existem etiquetas <ref> para um grupo chamado "nota", mas não foi encontrada nenhuma etiqueta <references group="nota"/> correspondente


From Wikipedia, the free encyclopedia · View on Wikipedia

Developed by razib.in