Skip to content

Status and Roadmap

Daniel Wirtz edited this page Nov 11, 2018 · 167 revisions

Current state of development is tracked in GitHub projects.

High level status

  • Most of TypeScript's AOT-compatible syntax is supported
  • Manual memory management is in but GC remains to do
  • Classes are still wonky when it comes to the details
  • Standard library is very basic and needs a lot of work
  • No exception support yet, waiting for WebAssembly/exception-handling to land
  • We need more tests (pretty sure this will remain here)

High level goals

  • Get a memory manager and GC combo up and running
    • Memory manager
    • GC
  • Get a standard library up that "just works" (where AOT-compatible)
  • Improve linking, e.g. with C, based on what's supported by common tools
  • Compile the AssemblyScript compiler to WebAssembly using itself
  • Provide tools to automatically generate glue code and definitions

And, of course, keep up with the state of WebAssembly, most notably at this point:

Proposal Phase Status
Sign Extension Operations implementation --feature sign-extension
Mutable Globals implementation --feature mutable-global
Non-trapping float-to-int Conversions implementation
Reference Types implementation
Multi-value implementation
Bulk Memory Operations implementation
Exception handling proposal
Host Bindings proposal
Threads proposal
GC proposal

Standard library compatibility

Feature Notes
Globals
NaN
Infinity
isFinite
isInteger
isNaN
isSafeInteger
parseFloat Naive implementation
parseInt
decoreURI
decoreURIComponent
encoreURI
encodeURIComponent
Number There is no Number object in AssemblyScript, but one for each type instead.
EPSILON
MIN_VALUE
MAX_VALUE
MIN_SAFE_INTEGER
MAX_SAFE_INTEGER
NaN
NEGATIVE_INFINITY
POSITIVE_INFINITY
toExponential
toFixed
toLocaleString
toPrecision
toString
Array
length
from
isArray
of
concat
copyWithin
entries
every
fill
filter
find
findIndex
flat
flatMap
forEach No closures yet
includes
indexOf
join
keys
lastIndexOf
map No closures yet
pop
push
reduce
reduceRight
reverse
shift
slice
some
sort
splice
toLocaleString
toString
unshift
values
TypedArray
BYTES_PER_ELEMENT
buffer
byteLength
byteOffset
length
from
of
copyWithin
entries
every
fill
filter
find
findIndex
forEach
includes
indexOf
join
keys
lastIndexOf
map
reduce
reduceRight
reverse
set
slice
some
sort
subarray
toLocaleString
toString
values

ArrayBuffer

  • #byteLength
  • isView()
  • #slice()
  • #transfer()
  • #toString()

DataView

  • #buffer
  • #byteLength
  • #byteOffset
  • #getInt8()
  • #getUint8()
  • #getInt16()
  • #getUint16()
  • #getInt32()
  • #getUint32()
  • #getInt64() 1
  • #getUint64() 1
  • #getFloat32()
  • #getFloat64()
  • #setInt8()
  • #setUint8()
  • #setInt16()
  • #setUint16()
  • #setInt32()
  • #setUint32()
  • #setInt64() 1
  • #setUint64() 1
  • #setFloat32()
  • #setFloat64()
  • #toString()

String

  • #length
  • fromCharCode()
  • fromCharCodes() 1
  • fromCodePoint()
  • fromCodePoints() 1
  • #charAt()
  • #charCodeAt()
  • #concat()
  • #endsWith()
  • #includes()
  • #indexOf()
  • #lastIndexOf()
  • #localeCompare()
  • #match()
  • #normalize()
  • #padEnd()
  • #padStart()
  • #repeat()
  • #replace()
  • #search()
  • #slice()
  • #split()
  • #startsWith()
  • #substr()
  • #substring()
  • #toLocaleLowerCase()
  • #toLocaleUpperCase()
  • #toLowerCase()
  • #toUpperCase()
  • #toString()
  • #trim()
  • #trimLeft()/#trimStart()
  • #trimRight()/#trimEnd()
  • #[Symbol.iterator]()
  • raw()

Symbol

  • #for()
  • #keyFor()

Math/Mathf

  • E
  • LN10
  • LN2
  • LOG10E
  • LOG2E
  • PI
  • SQRT1_2
  • SQRT2
  • abs()
  • acos()
  • acosh()
  • asin()
  • asinh()
  • atan()
  • atan2()
  • atanh()
  • cbrt()
  • ceil()
  • clz32()
  • cos()
  • cosh()
  • exp()
  • expm1()
  • floor()
  • fround()
  • hypot()
  • imul()
  • log()
  • log10()
  • log1p()
  • log2()
  • max()
  • min()
  • pow()
  • random()
  • round()
  • sign()
  • sin()
  • sinh()
  • sqrt()
  • tan()
  • tanh()
  • trunc()

Map

  • #size
  • #clear()
  • #delete()
  • #entries()
  • #forEach()
  • #get()
  • #has()
  • #set()
  • #keys()
  • #values()
  • #toString()
  • #[Symbol.iterator]()

Set

  • #size
  • #add()
  • #clear()
  • #delete()
  • #entries()
  • #forEach()
  • #has()
  • #values()
  • #toString()
  • #[Symbol.iterator]()

WeakMap

  • #delete()
  • #get()
  • #has()
  • #set()
  • #toString()

WeakSet

  • #add()
  • #delete()
  • #has()
  • #toString()

console

  • assert()
  • clear()
  • count()
  • dir()
  • error()
  • group()
  • groupCollapsed()
  • groupEnd()
  • info()
  • log()
  • table()
  • time()
  • timeEnd()
  • trace()
  • warn()

JSON

  • parse()
  • stringify()

Object

  • is()
  • keys()
  • assign()
  • create()
  • entries()
  • getOwnPropertyNames()
  • getOwnPropertySymbols()
  • #toString()

Date

  • UTC
  • now()
  • parse()
  • #getDate()
  • #getDay()
  • #getFullYear()
  • #getHours()
  • #getMilliseconds()
  • #getMinutes()
  • #getMonth()
  • #getSeconds()
  • #getTime()
  • #getTimezoneOffset()
  • #getUTCDate()
  • #getUTCDay()
  • #getUTCFullYear()
  • #getUTCHours()
  • #getUTCMilliseconds()
  • #getUTCMinutes()
  • #getUTCMonth()
  • #getUTCSeconds()
  • #setDate()
  • #setFullYear()
  • #setHours()
  • #setMilliseconds()
  • #setMinutes()
  • #setMonth()
  • #setSeconds()
  • #setTime()
  • #setUTCDate()
  • #setUTCFullYear()
  • #setUTCHours()
  • #setUTCMilliseconds()
  • #setUTCMinutes()
  • #setUTCMonth()
  • #setUTCSeconds()
  • #toDateString()
  • #toISOString()
  • #toJSON()
  • #toLocaleDateString()
  • #toLocaleString()
  • #toLocaleTimeString()
  • #toString()
  • #toTimeString()
  • #toUTCString()

Error/RangeError/TypeError

  • #message
  • #stack
  • #toString()

Promise

  • all()
  • race()
  • reject()
  • resolve()
  • #catch()
  • #finally()
  • #then()

RegExp

  • $1-$9
  • input ($_)
  • lastMatch ($&)
  • lastParen ($+)
  • lastIndex
  • leftContext ($`)
  • rightContext ($')
  • #flags
  • #global
  • #ignoreCase
  • #multiline
  • #source
  • #sticky
  • #unicode
  • #exec()
  • #test()
  • #toSource()
  • #toString()
  • #[Symbol.replace]()
  • #[Symbol.search]()
  • #[Symbol.split]()

BigInt

1 AssemblyScript-specific
2 Filler implementation present

 

Clone this wiki locally