Skip to content
master
Go to file
Code
This branch is 149 commits behind AssemblyScript:master.

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

description
Let's attempt the unthinkable, shall we?

Introduction

AssemblyScript compiles a strict subset of TypeScript (a typed superset of JavaScript) to WebAssembly using Binaryen, looking like:

{% code-tabs %} {% code-tabs-item title="fib.ts" %}

export function fib(n: i32): i32 {
  var a = 0, b = 1;
  for (let i = 0; i < n; i++) {
    let t = a + b; a = b; b = t;
  }
  return b;
}

{% endcode-tabs-item %} {% endcode-tabs %}

$> asc fib.ts -b fib.wasm -O3

Its architecture differs from a JavaScript VM in that it compiles a program ahead of time, quite similar to other static compilers. On top of WebAssembly types, it provides both low-level built-ins to access WebAssembly features directly as well as a JavaScript-like standard library on top of a relatively small managed runtime enabling the creation of programs that look and feel much like TypeScript.

For example, on the lowest level, memory can be accessed using the load<T>(offset) and store<T>(offset, value) built-ins that compile to WebAssembly instructions directly

store<i32>(8, load<i32>(0) + load<i32>(4));

while the standard library provides implementations of ArrayBuffer , Uint8Array , String , Map etc. on a higher level:

var view = new Int32Array(12);
view[2] = view[0] + view[1];

The compiler still has its limitations and we are still waiting for WebAssembly features that are currently undergoing specification (marked as 🦄 throughout the documentation) to unleash its full potential. But it is open source and everyone can contribute, so we are getting there.

Sounds appealing to you? Read on!

About

Definitely not The Book of AssemblyScript.

Resources

Releases

No releases published

Packages

No packages published
You can’t perform that action at this time.