1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
---
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>
|