---
tags: frontend, WebAssembly, AssemblyScript
---
# AssemblyScript
## Get start
https://www.assemblyscript.org/getting-started.html#setting-up-a-new-project
1. `npm init`
2. `npm install --save-dev assemblyscript`
3. `npx asinit .` 初始化, 記得要加 .
4. `npm run asbuild`
5. `npm test`
6. `npm start`
## Practice
1. Add more functions in ./assembly/index.ts
example:
* modify `.\assembly\index.ts`
```js
export function add(a: i32, b: i32): i32 {
return a + b;
}
// Add a new function
export function fibonacci(v: i32): i32 {
if (v === 1 || v === 2) return 1;
return fibonacci(v - 1) + fibonacci(v - 2);
}
```
* Add a convenience script help build and test in `package.json`
```
"scripts": {
...
"bnt": "npm run asbuild:debug && npm run test"
},
```
* Add some test in `./tests/index.js`
```javascript=
import assert from "assert";
import { add, fibonacci } from "../build/debug.js";
assert.strictEqual(add(1, 2), 3);
assert.strictEqual(fibonacci(1), 1);
assert.strictEqual(fibonacci(2), 1);
assert.strictEqual(fibonacci(3), 2);
assert.strictEqual(fibonacci(4), 3);
assert.strictEqual(fibonacci(5), 5);
assert.strictEqual(fibonacci(6), 8);
assert.strictEqual(fibonacci(7), 13);
assert.strictEqual(fibonacci(8), 21);
assert.strictEqual(fibonacci(9), 34);
assert.strictEqual(fibonacci(10), 55);
console.log("ok");
```
* Let's test!
`npm run bnt`
If everything is good, you should see "ok" on terminal.

## About AssemblyScript you should know
1. Strictly typed
https://www.assemblyscript.org/concepts.html#strictly-typed
2. Import module
https://www.assemblyscript.org/concepts.html#sandboxed-execution
## AssemblyScript 從開始到放棄
AssemblyScript 並不相容 js 或 ts 的函式庫, 要重新改寫 crypto-js 整個函式庫顯然是不現實的..., 因此暫時放棄這個選項, 如果只是需要時做簡單的商業邏輯或許可以考慮使用 AssemblyScript, 但實作對稱加密...算了吧 orz