AssemblyScript is a new compiler targeting WebAssembly while utilizing TypeScript's syntax and node's vibrant ecosystem. Instead of requiring complex toolchains to set up, you can simply npm install it - or run it in a browser.
By compiling a variant of TypeScript to Binaryen IR, the resulting module can be validated, optimized, emitted in WebAssembly text or binary format and converted to asm.js as a polyfill.
The compiler itself is written in "portable AssemblyScript" so it can be compiled to both JavaScript using tsc and, eventually, to WebAssembly using asc.
This version of the compiler (0.5.0, NEXT) is relatively new and does not yet support some features a TypeScript programmer might expect, e.g., strings, arrays and classes. For now, you can see the compiler tests for an overview of what's supposed to be working already.
If you'd like to try it today or even plan to contribute, this is how you do it:
$> git clone https://github.com/AssemblyScript/next.git
$> cd next
$> npm install
Author your module in AssemblyScript (definitions) or portable AssemblyScript (definitions) and run:
$> node bin\asc yourModule.ts
Syntax: asc [options] [entryFile ...]
Examples: asc hello.ts
asc hello.ts -b hello.wasm -t hello.wast -a hello.js
asc hello.ts -b > hello.wasm
Options:
-v, --version Prints the compiler's version.
-h, --help Prints this message.
-O, --optimize Optimizes the module.
-c, --validate Validates the module.
-o, --outFile Specifies the output file. Format is determined by file extension.
-b, --binaryFile Specifies the binary format output file (.wasm).
-t, --textFile Specifies the text format output file (.wast).
-a, --asmjsFile Specifies the asm.js format output file (.js).
--noTreeShaking Disables tree-shaking.
--noDebug Disables assertions.
--trapMode Sets the trap mode to use.
allow Allow trapping operations. This is the default.
clamp Replace trapping operations with clamping semantics.
js Replace trapping operations with JS semantics.
Unless a bundle has been built to dist/, asc runs the TypeScript sources on the fly via ts-node. Useful for development.
Building an UMD bundle to dist/assemblyscript.js (does not bundle binaryen.js):
$> npm run build
Running the tests:
$> npm test