Status and Roadmap

Max Graey edited this page Feb 18, 2019 · 56 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 standardize --enable sign-extension
Mutable Globals standardize --enable mutable-global
Non-trapping float-to-int Conversions standardize
Reference Types implementation
Multi-value implementation
Bulk Memory Operations standardize --enable bulk-memory
SIMD implementation
Threads implementation
Exception handling proposal
Host Bindings proposal
GC proposal

Standard library compatibility

AssemblyScript comes with its own lightweight standard library that aims to be as compatible as it can get to what you'd expect in the browser. The following table outlines what's implemented already:

Feature Notes

Globals

NaN βœ“ Context-sensitive (f32 in f32 context, otherwise f64)
Infinity βœ“ Context-sensitive (f32 in f32 context, otherwise f64)
isFinite βœ“
isNaN βœ“
parseFloat βœ“ Naive implementation
parseInt βœ“
decodeURI
decodeURIComponent
encodeURI
encodeURIComponent

Number

There is no Number object in AssemblyScript, but one for each type instead.
EPSILON βœ“
MIN_VALUE βœ“
MAX_VALUE βœ“
MIN_NORMAL_VALUE βœ“ AssemblyScript specific
MIN_SAFE_INTEGER βœ“
MAX_SAFE_INTEGER βœ“
NaN βœ“
NEGATIVE_INFINITY βœ“
POSITIVE_INFINITY βœ“
isFinite βœ“
isInteger βœ“
isNaN βœ“
isSafeInteger βœ“
parseFloat βœ“ Naive implementation
parseInt βœ“
toExponential
toFixed
toLocaleString
toPrecision
toString βœ“

Array

length βœ“
from
isArray βœ“
of
concat βœ“
copyWithin βœ“
entries
every βœ“ No closures yet
fill βœ“
filter βœ“ No closures yet
find
findIndex βœ“ No closures yet
flat
flatMap
forEach βœ“ No closures yet
includes βœ“
indexOf βœ“
join βœ“
keys
lastIndexOf βœ“
map βœ“ No closures yet
pop βœ“
push βœ“
reduce βœ“ No closures yet
reduceRight βœ“ No closures yet
reverse βœ“
shift βœ“
slice βœ“
some βœ“ No closures yet
sort βœ“
splice βœ“ Partially implement without inserting items
toLocaleString
toString βœ“
unshift βœ“
values
[Symbol.iterator]

TypedArray

BYTES_PER_ELEMENT βœ“
buffer βœ“
byteLength βœ“
byteOffset βœ“
length βœ“
from
of
copyWithin
entries
every βœ“ No closures yet
fill βœ“
filter
find
findIndex βœ“ No closures yet
forEach
includes
indexOf
join
keys
lastIndexOf
map βœ“ No closures yet
reduce βœ“ No closures yet
reduceRight βœ“ No closures yet
reverse
set
slice
some βœ“ No closures yet
sort βœ“
subarray βœ“
toLocaleString
toString
values
[Symbol.iterator]

ArrayBuffer

byteLength βœ“
isView βœ“
slice βœ“
transfer Stage 2 Proposal
toString βœ“

DataView

βœ“
buffer βœ“
byteLength βœ“
byteOffset βœ“
getInt8 βœ“
getUint8 βœ“
getInt16 βœ“
getUint16 βœ“
getInt32 βœ“
getUint32 βœ“
getInt64 βœ“ AssemblyScript specific
getUint64 βœ“ AssemblyScript specific
getFloat32 βœ“
getFloat64 βœ“
setInt8 βœ“
setUint8 βœ“
setInt16 βœ“
setUint16 βœ“
setInt32 βœ“
setUint32 βœ“
setInt64 βœ“ AssemblyScript specific
setUint64 βœ“ AssemblyScript specific
setFloat32 βœ“
setFloat64 βœ“
toString βœ“

String

length βœ“
lengthUTF8 βœ“ AssemblyScript specific
fromCharCode βœ“
fromCharCodes βœ“ AssemblyScript specific
fromCodePoint βœ“
fromCodePoints βœ“ AssemblyScript specific
fromUTF8 βœ“ AssemblyScript specific
charAt βœ“
charCodeAt βœ“
concat βœ“
endsWith βœ“
includes βœ“
indexOf βœ“
lastIndexOf βœ“
localeCompare
match
normalize
padEnd βœ“
padStart βœ“
repeat βœ“
replace
replaceAll Stage 1 Proposal
search
slice βœ“
split βœ“
startsWith βœ“
substr βœ“
substring βœ“
toLocaleLowerCase
toLocaleUpperCase
toLowerCase
toUpperCase
toString βœ“
toUTF8 βœ“ AssemblyScript specific
trim βœ“
trimLeft/trimStart βœ“
trimRight/trimEnd βœ“
[Symbol.iterator]
raw

Symbol

βœ“
for βœ“
keyFor βœ“
toString βœ“

Math

This also applies to specific Mathf (single float point) version of Math
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 βœ“
signbit βœ“ Stage 1 Proposal
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 βœ“
difference Stage 2 Proposal
entries
forEach
has βœ“
intersection Stage 2 Proposal
isDisjointFrom Stage 2 Proposal
isSubsetOf Stage 2 Proposal
isSupersetOf Stage 2 Proposal
union Stage 2 Proposal
symmetricDifference Stage 2 Proposal
values
toString βœ“
[Symbol.iterator]

WeakMap

delete
get
has
set
toString

WeakSet

add
delete
has
toString

Console

assert
clear
count
countReset
dir
error
group
groupCollapsed
groupEnd
info
log
table
time
timeEnd
trace
warn

JSON

parse
stringify

Object

is
keys
assign
create
entries
getOwnPropertyNames
getOwnPropertySymbols
toString
values

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

message βœ“
name βœ“
stack
toString βœ“

Iterator

collect Iterator helpers proposal (Stage 1)
from Iterator helpers proposal (Stage 1)
filter Iterator helpers proposal (Stage 1)
of Iterator helpers proposal (Stage 1)
map Iterator helpers proposal (Stage 1)
next
reduce Iterator helpers proposal (Stage 1)
return
take Iterator helpers proposal (Stage 1)
throw

Promise

all
allSettled Stage 2
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]

Atomics

add
and
compareExchange
exchange
isLockFree
load
notify
or
store
sub
wait
wake
xor

SIMD

BigInt

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.