A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://kripken.github.io/talks/wasm.html below:

Emscripten and WebAssembly

Alon Zakai / @kripken

Dec 9th 2015

an open source LLVM-based compiler from C and C++ to JavaScript

C++    LLVM    Emscripten    JS

  float array[5000]; // C++
  int main() {
    for (int i = 0; i < 5000; ++i) {
      array[i] += 1.0f;
    }
  }

Emscripten

  function main() { // JavaScript
    var a = 0, b = 0;
    do {
      a = (8 + (b << 2)) | 0;
      HEAPF32[a >> 2] = +HEAPF32[a >> 2] + 1.0;
      b = (b + 1) | 0;
    } while ((b | 0) < 5000);
  }

This is asm.js, a low-level subset of JavaScript

Looks kind of hackish ;)

(no official logo yet!)

WebAssembly = asm.js done right

Binary executable format for the web

New web standard, multi-vendor cooperation

Not limited by JavaScript, but does integrate properly with the Web


For WebAssembly to succeed we need two things:

1. Browsers to support WebAssembly natively

2. Compilers that emit WebAssembly

I'll talk about the second of those

Already a few compilers in the works:


New WebAssembly backend in LLVM by sunfish and others

ilwasm for .NET/CIL


Longer-term efforts, and we want to test and launch WebAssembly ASAP. What to do?

A hack, of course! :)

C++    Emscripten    asm.js

+

asm.js    ...    WebAssembly

... = asm2wasm: Compile asm.js ⇒ WebAssembly

Part of Binaryen: a WebAssembly infrastructure library, written in C++

Parse and emit WebAssembly

Represent and process WebAssembly

Interpret WebAssembly

wasm2asm: Compile WebAssembly ⇒ asm.js (wip)

Binaryen is extensible and has a convenient commandline interface


https://github.com/WebAssembly/binaryen

The name: WebAssembly is a Binary- format, and we integrate with Emscript-enBinaryen


wasm.js

wasm.js ports Binaryen to JavaScript using Emscripten

For example, it can execute WebAssembly in the Binaryen interpreter in JavaScript, as a (slow) polyfill

wasm.js demo


That's a C program compiled to WebAssembly — including full libc, syscalls, etc. — running in a WebAssembly interpreter written in C++, compiled to JavaScript, and embedded on this HTML page

C++    Emscripten+Binaryen    wasm

Runnable today, using the wasm.js compiled interpreter

And when browsers have native support for WebAssembly, the same build should just work

So Emscripten+Binaryen seems to work. How good is it?

Passes the Emscripten test suite, which is very comprehensive

Interpreter passes the WebAssembly spec test suite

Relatively little new code here, on top of a stable toolchain


Summary

Emscripten+Binaryen provide a C++ to WebAssembly solution, today

Also helping with experiments and prototyping for the WebAssembly design process

Binaryen can help grow the WebAssembly toolchain ecosystem

https://github.com/WebAssembly/binaryen


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.3