WebAssembly - Trabajar con Nodejs

Javascript tiene un montón de API que pueden funcionar con código wasm. La API también es compatible con nodejs.

Instale NODEJS en su sistema. Cree un archivo Factorialtest.js.

Usemos el código factorial de C ++ como se muestra a continuación:

int fact(int n) {
   if ((n==0)||(n==1))
      return 1;
   else
      return n*fact(n-1);
}

Abra Wasm Explorer, que está disponible en https://mbebenita.github.io/WasmExplorer/ como se muestra a continuación -

La primera columna tiene la función factorial C ++, la segunda columna tiene el formato de texto de WebAssembly y la última columna tiene el código de ensamblaje x86.

El formato de texto de WebAssembly es el siguiente:

(module
   (table 0 anyfunc)
   (memory $0 1)
   (export "memory" (memory $0))
   (export "_Z4facti" (func $_Z4facti))
   (func $_Z4facti (; 0 ;) (param $0 i32) (result i32)
      (local $1 i32)
      (set_local $1(i32.const 1))
      (block $label$0
         (br_if $label$0
            (i32.eq
               (i32.or
                  (get_local $0)
                  (i32.const 1)
               )
               (i32.const 1)
            )
         )
         (set_local $1
            (i32.const 1)
         )
         (loop $label$1
            (set_local $1
               (i32.mul
                  (get_local $0)
                     (get_local $1)
               )
            )
            (br_if $label$1
               (i32.ne
                  (i32.or
                     (tee_local $0
                        (i32.add
                           (get_local $0)
                           (i32.const -1)
                        )
                     )
                     (i32.const 1)
                  )
                  (i32.const 1)
               )
            )
         )
      )
      (get_local $1)
   )
)

El hecho de la función C ++ se ha exportado como "_Z4facti”En formato de texto de WebAssembly.

Factorialtest.js

const fs = require('fs');
const buf = fs.readFileSync('./factorial.wasm');
const lib = WebAssembly.instantiate(new Uint8Array(buf)).
   then(res => {
      for (var i=1;i<=10;i++) {
         console.log("The factorial of "+i+" = "+res.instance.exports._Z4facti(i))
      }
   }
);

En su línea de comando, ejecute el comando node factorialtest.js y el resultado es el siguiente:

C:\wasmnode>node factorialtest.js
The factorial of 1 = 1
The factorial of 2 = 2
The factorial of 3 = 6
The factorial of 4 = 24
The factorial of 5 = 120
The factorial of 6 = 720
The factorial of 7 = 5040
The factorial of 8 = 40320
The factorial of 9 = 362880
The factorial of 10 = 3628800