--- title: WebAssembly slug: WebAssembly tags: - Aterrizaje - WebAssembly - wasm translation_of: WebAssembly --- <div>{{WebAssemblySidebar}}</div> <p class="summary" dir="ltr" id="docs-internal-guid-22bb55aa-d69e-e8ef-cbc6-aafea272f684">WebAssembly es un nuevo tipo de código que puede ser ejecutado en navegadores modernos — es un lenguaje de bajo nivel, similar al lenguaje ensamblador, con un formato binario compacto que se ejecuta con rendimiento casi nativo y provee un objetivo de compilación para lenguajes como C/C++ y Rust que les permite correr en la web. También está diseñado para correr a la par de JavaScript, permitiendo que ambos trabajen juntos.</p> <h2 dir="ltr" id="En_pocas_palabras">En pocas palabras</h2> <p dir="ltr">WebAssembly tiene grandes implicaciones para la plataforma web — provee una forma de correr código escrito en múltiples lenguajes en la web a una velocidad casi nativa, con aplicaciones cliente corriendo en la web que anteriormente no podrían haberlo hecho.</p> <p dir="ltr">WebAssembly esta diseñado para complementar y correr a la par de JavaScript — usando las APIs WebAssembly de JavaScript, puedes cargar módulos de WebAssembly en una aplicación JavaScript y compartir funcionalidad entre ambos. Esto te permite aprovechar el rendimiento y poder de WebAssembly y la expresividad y flexibilidad de JavaScript en las mismas aplicaciones, incluso si no sabes cómo escribir código WebAssembly.</p> <p dir="ltr">Y lo mejor es que está siendo desarrollado como un estándar web a través del <a href="https://www.w3.org/wasm/">grupo de trabajo de WebAssembly del W3C</a> y su <a href="https://www.w3.org/community/webassembly/">grupo comunitario</a> con las participación activa de todos los principales fabricantes de navegadores.</p> <div class="row topicpage-table"> <div class="section"> <h2 dir="ltr" id="Guías">Guías</h2> <dl> <dt><a href="/en-US/docs/WebAssembly/Concepts">Conceptos de WebAssembly</a></dt> <dd>Empieza leyendo los conceptos de alto nivel detrás de WebAssembly — qué es, por qué es tan útil, cómo encaja en la plataforma web (y más allá), y cómo usarlo.</dd> <dt><a href="/en-US/docs/WebAssembly/C_to_wasm">Compilar un nuevo módulo de C/C++ a WebAssembly</a></dt> <dd>Al escribir código en C/C++, puedes compilarlo a .wasm usando una herramienta como <a href="/en-US/docs/Mozilla/Projects/Emscripten/">Emscripten</a>. Veamos cómo funciona.</dd> <dt><a href="https://developer.mozilla.org/en-US/docs/WebAssembly/existing_C_to_wasm">Compilar un módulo existente de C a WebAssembly</a></dt> <dd>Uno de los principales casos de uso para WebAssembly es tomar las librerías existentes del ecosistema de C y permitir que los desarrolladores los usen en la web.</dd> <dt><a href="/en-US/docs/WebAssembly/rust_to_wasm">Compilar de Rust a WebAssembly</a></dt> <dd>Si has escrito algo en Rust, ¡puedes compilarlo a WebAssembly! Este tutorial te enseña todo lo que necesitas saber para compilar un proyecto de Rust a wasm y usarlo en una aplicación web existente.</dd> <dt><a href="/en-US/docs/WebAssembly/Loading_and_running">Cargar y ejecutar código WebAssembly</a></dt> <dd>Una vez que tengas un .wasm, este artículo cubre cómo recuperarlo, compilarlo e instanciarlo, combinando la API de <a href="/es/docs/Web/JavaScript/Referencia/Objetos_globales/WebAssembly">WebAssembly de JavaScript</a> con las APIs <a href="/es/docs/Web/API/Fetch_API">Fetch</a> o <a href="/es/docs/Web/API/XMLHttpRequest">XHR</a>.</dd> <dt><a href="/en-US/docs/WebAssembly/Using_the_JavaScript_API">Usar la API WebAssembly de JavaScript</a></dt> <dd>Una vez cargado el módulo .wasm, querrás usarlo. En este artículo te mostramos cómo usar WebAssembly mediante la API WebAssembly de JavaScript.</dd> <dt><a href="/en-US/docs/WebAssembly/Exported_functions">Funciones exportadas de WebAssembly</a></dt> <dd>Las funciones exportadas de WebAssembly son el reflejo en JavaScript de las funciones de WebAssembly que te permiten llamar código WebAssembly desde JavaScript. Este artículo las describe.</dd> <dt><a href="/en-US/docs/WebAssembly/Understanding_the_text_format">Entendiendo el formato de texto WebAssembly</a></dt> <dd>Este artículo explica el formato de texto wasm. Esta es la representación textual de bajo nivel de un módulo .wasm, mostrada en las herramientas de desarrollador del navegador al depurar.</dd> <dt><a href="/en-US/docs/WebAssembly/Text_format_to_wasm">Convertir el formato de texto WebAssembly a wasm</a></dt> <dd>Este artículo provee una guía para convertir un módulo de WebAssembly escrito en su formato de texto a un binario .wasm.</dd> </dl> </div> <div class="section"> <h2 dir="ltr" id="Referencia_de_la_API">Referencia de la API</h2> <dl> <dt>{{jsxref("Global_objects/WebAssembly", "WebAssembly")}}</dt> <dd>Este objeto sirve como espacio de nombres para toda funcionalidad relacionada a WebAssembly.</dd> <dt>{{jsxref("Global_objects/WebAssembly/Global", "WebAssembly.Global()")}}</dt> <dd>El objeto <code>WebAssembly.Global</code> representa una instancia variable global, accesible desde JavaScript e importable/exportable a través de una o más instancias de {{jsxref("WebAssembly.Module")}}. Esto permite el enlace dinámico de varios módulos.</dd> <dt>{{jsxref("Global_objects/WebAssembly/Module", "WebAssembly.Module()")}}</dt> <dd>El objeto <code>WebAssembly.Module</code> contiene código WebAssembly sin estado que ha sido ya compilado por el navegador y puede ser <a href="/en-US/docs/Web/API/Worker/postMessage">compartido con workers</a> e instanciado varias veces.</dd> <dt>{{jsxref("Global_objects/WebAssembly/Instance", "WebAssembly.Instance()")}}</dt> <dd>Un objeto <code>WebAssembly.Instance</code> es una instancia ejecutable y con estado de un <code>Module</code>. Los objetos <code>Instance</code> contienen todas las <a href="/en-US/docs/WebAssembly/Exported_functions">funciones exportadas de WebAssembly</a> que permiten llamar a código WebAssembly desde JavaScript.</dd> <dt>{{jsxref("Global_objects/WebAssembly/instantiateStreaming", "WebAssembly.instantiateStreaming()")}}</dt> <dd>La función <code>WebAssembly.instantiateStreaming()</code> es la principal API para compilar e instanciar código WebAssembly, retornando tanto un <code>Module</code> como su primera <code>Instance</code>.</dd> <dt>{{jsxref("Global_objects/WebAssembly/Memory", "WebAssembly.Memory()")}}</dt> <dd>Un objeto <code>WebAssembly.</code><code>Memory</code> es un {{jsxref("Global_objects/ArrayBuffer", "ArrayBuffer")}} redimensionable que contiene los bytes de memoria accedidos por una <code>Instance</code>.</dd> <dt>{{jsxref("Global_objects/WebAssembly/Table", "WebAssembly.Table()")}}</dt> <dd>Un objeto <code>WebAssembly.</code><code>Table</code> es un arreglo tipado redimensionable de valores opacos, como referencias a funciones, que son accedidos por una <code>Instance</code>.</dd> <dt>{{jsxref("WebAssembly.CompileError()")}}</dt> <dd>Crea un nuevo objeto <code>CompileError</code> de WebAssembly.</dd> <dt>{{jsxref("WebAssembly.LinkError()")}}</dt> <dd>Crea un nuevo objeto <code>LinkError</code> de WebAssembly.</dd> <dt>{{jsxref("WebAssembly.RuntimeError()")}}</dt> <dd>Crea un nuevo objeto <code>RuntimeError</code> de WebAssembly.</dd> </dl> </div> </div> <h2 dir="ltr" id="Ejemplos">Ejemplos</h2> <ul dir="ltr"> <li><a href="https://github.com/JasonWeathersby/WASMSobel">WASMSobel</a></li> <li>Consulta nuestro repositorio <a href="https://github.com/mdn/webassembly-examples/">webassembly-examples</a> para ver otros ejemplos.</li> </ul> <h2 id="Especificaciones">Especificaciones</h2> <table class="standard-table"> <thead> <tr> <th scope="col">Especificación</th> <th scope="col">Estado</th> <th scope="col">Comentarios</th> </tr> </thead> <tbody> <tr> <td>{{SpecName('WebAssembly JS')}}</td> <td>{{Spec2('WebAssembly JS')}}</td> <td>Borrador inicial de la definición de la API de JavaScript.</td> </tr> </tbody> </table> <h2 id="Browser_compatibility" name="Browser_compatibility">Compatibilidad con navegadores</h2> <div> <p>{{Compat("javascript.builtins.WebAssembly")}}</p> </div> <h2 id="Ver_también">Ver también</h2> <ul dir="ltr"> <li><a href="https://research.mozilla.org/webassembly/">WebAssembly en Mozilla Research</a></li> <li><a href="http://webassembly.org/">webassembly.org</a></li> <li><a href="https://hacks.mozilla.org/category/webassembly/">Artículos de WebAssembly en el blog Mozilla Hacks</a></li> <li><a href="https://www.w3.org/community/webassembly/">Grupo comunitario de WebAssembly del W3C</a></li> <li><a href="/en-US/docs/Web/HTTP/Headers/Large-Allocation">Cabecera HTTP Large-Allocation</a></li> <li><a href="https://developers.google.com/web/updates/2018/03/emscripting-a-c-library">Compilar una librería de C a Wasm</a></li> </ul>