-
-
Notifications
You must be signed in to change notification settings - Fork 670
Status and Roadmap
Max Graey edited this page Nov 12, 2018
·
167 revisions
Current state of development is tracked in GitHub projects.
- 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)
- 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 |
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 | |
---|---|---|
NaN | ✓ | Context-sensitive (f32 in f32 context, otherwise f64) |
Infinity | ✓ | Context-sensitive (f32 in f32 context, otherwise f64) |
isFinite | ✓ | |
isInteger | ✓ | |
isNaN | ✓ | |
isSafeInteger | ✓ | |
parseFloat | ✓ | Naive implementation |
parseInt | ✓ | |
decodeURI | ||
decodeURIComponent | ||
encodeURI | ||
encodeURIComponent | ||
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 | ||
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 | ✓ | |
toLocaleString | ||
toString | ✓ | |
unshift | ✓ | |
values | ||
[Symbol.iterator] | ||
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 | ||
[Symbol.iterator] | ||
byteLength | ✓ | |
isView | ||
slice | ✓ | |
transfer | ||
toString | ||
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 | ||
length | ✓ | |
fromCharCode | ✓ | |
fromCharCodes | ✓ | AssemblyScript specific |
fromCodePoint | ✓ | |
fromCodePoints | ✓ | AssemblyScript specific |
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 | ||
for | ✓ | |
keyFor | ✓ | |
toString | ||
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 | ✓ | |
sin | ||
sinh | ✓ | |
sqrt | ✓ | |
tan | ||
tanh | ✓ | |
trunc | ✓ | |
size | ✓ | |
clear | ✓ | |
delete | ✓ | |
entries | ||
forEach | ||
get | ✓ | |
has | ✓ | |
set | ✓ | |
keys | ||
values | ||
toString | ||
[Symbol.iterator] | ||
size | ✓ | |
add | ✓ | |
clear | ✓ | |
delete | ✓ | |
entries | ||
forEach | ||
has | ✓ | |
values | ||
toString | ||
[Symbol.iterator] | ||
delete | ||
get | ||
has | ||
set | ||
toString | ||
add | ||
delete | ||
has | ||
toString | ||
assert | ||
clear | ||
count | ||
dir | ||
error | ||
group | ||
groupCollapsed | ||
groupEnd | ||
info | ||
log | ||
table | ||
time | ||
timeEnd | ||
trace | ||
warn | ||
parse | ||
stringify | ||
is | ||
keys | ||
assign | ||
create | ||
entries | ||
getOwnPropertyNames | ||
getOwnPropertySymbols | ||
toString | ||
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 | ||
message | ✓ | |
name | ✓ | |
stack | ||
toString | ✓ | |
all | ||
race | ||
reject | ||
resolve | ||
catch | ||
finally | ||
then | ||
$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] |