generated at
AssemblyScript


TypeScriptのコードをWebAssemblyに変換できる
TypeScriptのサブセット

std は標準ライブラリだね
読もうねmrsekut

install ref
$ npm init
$ npm install --save-dev AssemblyScript/assemblyscript
$ npx asinit .
package.jsonがAS用に更新される
$ npm run asbuild
AS→wasmに変換
これで、 assembly/index.ts ファイルが生成された
ts
// The entry file of your WebAssembly module. export function add(a: i32, b: i32): i32 { return a + b; }
arrowで書いたら動かなくなった
/build の中には untouched.wasm optimized.wasm が含まれる
デバッグ時は前者で確認して、デプロイするときは後者を使えばいい ref

build to WebAssembly
$ npm run asbuild
.ts .wasm にコンパイルする
wasm
(module (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$v (func)) (memory $0 0) (table $0 1 funcref) (elem (i32.const 0) $null) (export "memory" (memory $0)) (export "table" (table $0)) (export "add" (func $assembly/index/add)) (func $assembly/index/add (; 0 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.add ) (func $null (; 1 ;) (type $FUNCSIG$v) nop ) )
こっからどうやって実行するんや? mrsekut


demoサイト


TypeScriptじゃないところ
型が追加されている ref
WebAssemblyは2つの型しかない
区別するために、ASには型が拡張されている
i8 , i32 , u64 , usize , f32 , void などなど
これらはTSのnumberを用いた型エイリアス ref
関数の戻り値型は付けないといけないことが多い
使用できない型
undefined , any など
今もかな? #あとで調べる
|| && が左右辺値ではなく、論理値になってる #要出典
@operator('+') のようなデコレータを用いることで演算子のオーバーロードができる
@inline デコレータ
関数に @inline を付けるとインライン展開され、関数の呼び出しコストを削減できる
Rustのものより速くなったりする ref
一方で、 .wasm のサイズが肥大化するらしい ref


GCがある
gc.collect() を手動で呼び出す必要がある


Architecture ref



ロードマップ
ASからwasmへのセルフホスト ref
ASコンパイラをASコンパイラを使ってwasmにする

最適化

サイズの比較
他の言語のものに比べて小さい ref


みどく

参考
記事自体は詳しいが、古いのでリンクが死んでる
途中から #未読