diff --git a/core/.buildinfo b/core/.buildinfo index ff7fac559a..b79524394c 100644 --- a/core/.buildinfo +++ b/core/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: a9b2a6c375758cb0fb64ad9d46cf0897 +config: 4bf74362783f484670989fd06ca2a291 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/core/_download/WebAssembly.pdf b/core/_download/WebAssembly.pdf index 640394ac78..a6224c3a90 100644 Binary files a/core/_download/WebAssembly.pdf and b/core/_download/WebAssembly.pdf differ diff --git a/core/_static/documentation_options.js b/core/_static/documentation_options.js index a12f10c5dc..76eff9778f 100644 --- a/core/_static/documentation_options.js +++ b/core/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '3.0 (Draft 2024-05-17)', + VERSION: '3.0 (Draft 2024-05-18)', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/core/appendix/algorithm.html b/core/appendix/algorithm.html index 0ab15e3fa0..4372071aaa 100644 --- a/core/appendix/algorithm.html +++ b/core/appendix/algorithm.html @@ -6,7 +6,7 @@ -
Note
Even with the unreachable flag set, consecutive operands are still pushed to and popped from the operand stack.
-That is necessary to detect invalid examples like \((\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}~(\href{../syntax/types.html#syntax-numtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}})~\href{../syntax/types.html#syntax-numtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}})\).
+That is necessary to detect invalid examples like \((\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}~(\href{../syntax/types.html#syntax-numtype}{\mathsf{i\scriptstyle32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}})~\href{../syntax/types.html#syntax-numtype}{\mathsf{i\scriptstyle64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}})\).
However, a polymorphic stack cannot underflow, but instead generates Bot
types as needed.
Added vector type and instructions that manipulate multiple numeric values in parallel (also known as SIMD, single instruction multiple data) [6]
New value type: \(\href{../syntax/types.html#syntax-vectype}{\mathsf{v128}}\)
New value type: \(\href{../syntax/types.html#syntax-vectype}{\mathsf{v\scriptstyle128}}\)
New memory instructions: \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{}\!N\!\mathsf{x}\!M\!\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{}N\mathsf{\_zero}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{}N\mathsf{\_splat}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{}N\mathsf{\_lane}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{}N\mathsf{\_lane}\)
New constant vector instruction: \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}\)
New unary vector instructions: \(\mathsf{v128.not}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.abs}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.neg}\), \(\mathsf{i8x16.popcnt}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.abs}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.neg}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.sqrt}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.ceil}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.floor}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.trunc}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.nearest}\)
Added managed reference types. [11]
New forms of heap types: \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{any}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{eq}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{i31}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{struct}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{array}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{none}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{nofunc}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{noextern}}\)
New reference type short-hands: \(\href{../syntax/types.html#syntax-reftype}{\mathsf{anyref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{eqref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{i31ref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{structref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{arrayref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{nullref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{nullfuncref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{nullexternref}}\)
New forms of heap types: \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{any}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{eq}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{i\scriptstyle31}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{struct}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{array}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{none}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{nofunc}}\), \(\href{../syntax/types.html#syntax-heaptype}{\mathsf{noextern}}\)
New reference type short-hands: \(\href{../syntax/types.html#syntax-reftype}{\mathsf{anyref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{eqref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{i{\scriptstyle31}ref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{structref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{arrayref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{nullref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{nullfuncref}}\), \(\href{../syntax/types.html#syntax-reftype}{\mathsf{nullexternref}}\)
New forms of type definitions: structure and array types, sub types, and recursive types
Enriched subtyping based on explicitly declared sub types and the new heap types
New generic reference instructions: \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref.eq}}\), \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref.test}}\), \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref.cast}}\), \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_on\_cast}}\), \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_on\_cast\_fail}}\)
New reference instructions for unboxed scalars: \(\href{../syntax/instructions.html#syntax-instr-i31}{\mathsf{ref.i31}}\), \(\href{../syntax/instructions.html#syntax-instr-i31}{\mathsf{i31.get}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)
New reference instructions for unboxed scalars: \(\href{../syntax/instructions.html#syntax-instr-i31}{\mathsf{ref.i\scriptstyle31}}\), \(\href{../syntax/instructions.html#syntax-instr-i31}{\mathsf{i{\scriptstyle31}.get}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)
New reference instructions for structure types: \(\href{../syntax/instructions.html#syntax-instr-struct}{\mathsf{struct.new}}\), \(\href{../syntax/instructions.html#syntax-instr-struct}{\mathsf{struct.new\_default}}\), \(\href{../syntax/instructions.html#syntax-instr-struct}{\mathsf{struct.get}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?\), \(\href{../syntax/instructions.html#syntax-instr-struct}{\mathsf{struct.set}}\)
New reference instructions for array types: \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new\_default}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new\_fixed}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new\_data}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new\_elem}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.get}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.set}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.len}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.fill}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.copy}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.init\_data}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.init\_elem}}\)
New reference instructions for converting host types: \(\href{../syntax/instructions.html#syntax-instr-extern}{\mathsf{any.convert\_extern}}\), \(\href{../syntax/instructions.html#syntax-instr-extern}{\mathsf{extern.convert\_any}}\)
Extended set of constant instructions with \(\href{../syntax/instructions.html#syntax-instr-i31}{\mathsf{ref.i31}}\), \(\href{../syntax/instructions.html#syntax-instr-struct}{\mathsf{struct.new}}\), \(\href{../syntax/instructions.html#syntax-instr-struct}{\mathsf{struct.new\_default}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new\_default}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new\_fixed}}\), \(\href{../syntax/instructions.html#syntax-instr-extern}{\mathsf{any.convert\_extern}}\), \(\href{../syntax/instructions.html#syntax-instr-extern}{\mathsf{extern.convert\_any}}\)
Extended set of constant instructions with \(\href{../syntax/instructions.html#syntax-instr-i31}{\mathsf{ref.i\scriptstyle31}}\), \(\href{../syntax/instructions.html#syntax-instr-struct}{\mathsf{struct.new}}\), \(\href{../syntax/instructions.html#syntax-instr-struct}{\mathsf{struct.new\_default}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new\_default}}\), \(\href{../syntax/instructions.html#syntax-instr-array}{\mathsf{array.new\_fixed}}\), \(\href{../syntax/instructions.html#syntax-instr-extern}{\mathsf{any.convert\_extern}}\), \(\href{../syntax/instructions.html#syntax-instr-extern}{\mathsf{extern.convert\_any}}\)