Este artigo resulta, no todo ou em parte, de uma tradução do artigo «WebAssembly» na Wikipédia em inglês, na versão original. |
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 |
|
Página oficial | webassembly |
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]
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.
WebAssembly is an open standard...
WebAssembly is a ... code format
WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure.
... 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.
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.
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.
<ref>
inválida; não foi fornecido texto para as refs de nome :1
<ref>
inválida; não foi fornecido texto para as refs de nome Wasmer
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.
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.
Bindings to JavaScript's standard, built-in objects, including their methods and properties.
<ref>
inválida; não foi fornecido texto para as refs de nome bytecode
<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