AssemblyScript NEXT
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
.
Development status
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.
A few early examples to get an idea:
- memcpy using load/store derived from musl
source - wast - Conway's Game of Life as seen on dcode.io
source - wast - html - i64 polyfill using 32-bit integers
source - wast
Getting started
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, base config) or portable AssemblyScript (definitions, base config) and run:
$> node bin\asc yourModule.ts
Using the CLI
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
Building an UMD bundle to dist/assemblyscript.js
(does not bundle binaryen.js):
$> npm run build
Running the tests:
$> npm test