AssemblyScript
https://gyazo.com/b13c92de43532f47ca72066b2fbc66a3
github
Introduction - The AssemblyScript Book
TypeScriptのコードをWebAssemblyに変換できる
TypeScriptのサブセット
github
stdは標準ライブラリだね
型定義ファイルnp
Wiki
roadmap
読もうねmrsekut.icon
install ref
$ npm init
$ npm install --save-dev AssemblyScript/assemblyscript
$ npx asinit .
package.jsonがAS用に更新される
$ npm run asbuild
AS→wasmに変換
これで、assembly/index.tsファイルが生成された
code: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にコンパイルする
code: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.icon
demoサイト
Conway's Game of Life - AssemblyScript
Mandelbrot set - AssemblyScript
TypeScriptじゃないところ
型が追加されている ref
WebAssemblyは2つの型しかない
区別するために、ASには型が拡張されている
i8, i32, u64, usize, f32, voidなどなど
これらはTSのnumberを用いた型エイリアス ref
関数の戻り値型は付けないといけないことが多い
使用できない型
undefined, anyなど
ref
今もかな? #あとで調べる
||や&&が左右辺値ではなく、論理値になってる #要出典
演算子overloadがある ref
@operator('+')のようなデコレータを用いることで演算子のオーバーロードができる
@inlineデコレータ
関数に@inlineを付けるとインライン展開され、関数の呼び出しコストを削減できる
Rustのものより速くなったりする ref
一方で、.wasmのサイズが肥大化するらしい ref
GCがある
incremental-tri-color-marking GC ref
gc.collect()を手動で呼び出す必要がある
参照カウントGC ref
Architecture ref
https://gyazo.com/3c88227661a2272432da259f84692f0f
ロードマップ
ASからwasmへのセルフホスト ref
ASコンパイラをASコンパイラを使ってwasmにする
最適化
AssemblyScript 最適化tips ·
サイズの比較
他の言語のものに比べて小さい ref
みどく
https://speakerdeck.com/gfx/assemblyscriptderaiburarikodofalsegao-su-hua-wositemiru
参考
AssemblyScript の今後 - Qiita
記事自体は詳しいが、古いのでリンクが死んでる
AssemblyScriptを使ってTypeScriptのコードを早くしよう - Qiita
途中から #未読
An AssemblyScript Primer (for TypeScript developers) - DEV Community 👩‍💻👨‍💻
#プログラミング言語