assemblyscript/README.md

70 lines
3.3 KiB
Markdown
Raw Normal View History

![](https://avatars1.githubusercontent.com/u/28916798?s=64) AssemblyScript
2017-12-15 15:00:19 +01:00
=================
2017-09-28 13:08:25 +02:00
2018-03-04 22:26:21 +01:00
[![npm](https://img.shields.io/npm/v/assemblyscript.svg)](https://www.npmjs.com/package/assemblyscript)
2017-12-15 15:00:19 +01:00
[![Build Status](https://travis-ci.org/AssemblyScript/assemblyscript.svg?branch=master)](https://travis-ci.org/AssemblyScript/assemblyscript)
2018-03-04 22:26:21 +01:00
[![Snap Status](https://build.snapcraft.io/badge/AssemblyScript/assemblyscript.svg)](https://build.snapcraft.io/user/AssemblyScript/assemblyscript)
2017-12-02 20:58:39 +01:00
**AssemblyScript** compiles strictly typed [TypeScript](http://www.typescriptlang.org) to [WebAssembly](http://webassembly.org) using [Binaryen](https://github.com/WebAssembly/binaryen). It generates lean and mean WebAssembly modules while being just an `npm install` away.
See [the AssemblyScript wiki](https://github.com/AssemblyScript/assemblyscript/wiki) for further instructions and documentation. You can also try it out in [WebAssembly Studio](https://webassembly.studio)!
2017-12-15 15:00:19 +01:00
2017-12-14 16:50:59 +01:00
Examples
--------
A few early examples to get an idea:
* **[Conway's Game of Life](./examples/game-of-life)**<br />
Continuously updates the cellular automaton and visualizes its state on a canvas.
* **[i64 polyfill](./examples/i64-polyfill)**<br />
Exposes WebAssembly's i64 operations to JavaScript using 32-bit integers (low and high bits).
* **[PSON decoder](./examples/pson)**<br />
2018-02-03 02:36:20 +01:00
A simple decoder for the PSON binary format.
Or browse the [compiler tests](./tests/compiler) for a more in-depth overview of what's supported already. One of them is a [showcase](./tests/compiler/showcase.ts).
Installation
------------
2017-12-05 13:35:14 +01:00
Note that this version of the compiler is relatively new and that some features a TypeScript programmer might expect are [still in the works](https://github.com/AssemblyScript/assemblyscript/wiki/Status-and-Roadmap) (see also: [Limitations](https://github.com/AssemblyScript/assemblyscript/wiki/Limitations)). Therefore, it's not on [npm](https://www.npmjs.com/package/assemblyscript), yet, but you can already try it out today:
2017-12-05 13:35:14 +01:00
```
2017-12-15 17:23:04 +01:00
$> git clone https://github.com/AssemblyScript/assemblyscript.git
$> cd assemblyscript
2017-12-05 13:35:14 +01:00
$> npm install
$> npm link
2017-12-05 13:35:14 +01:00
```
Alternatively, it's also possible to point npm to the GitHub repository for now:
```
$> npm install AssemblyScript/assemblyscript
```
Afterwards, once [your project is configured](https://github.com/AssemblyScript/assemblyscript/wiki/Configuring-a-project), it's just a matter of using your existing [TypeScript tooling](https://code.visualstudio.com) while coding, and [running the CLI](https://github.com/AssemblyScript/assemblyscript/wiki/Using-the-CLI) to build to WebAssembly:
2017-12-05 13:35:14 +01:00
```
$> asc myModule.ts -o myModule.wasm --optimize --validate --sourceMap
2017-12-05 13:35:14 +01:00
```
Building
--------
2018-03-31 18:18:55 +02:00
To build an UMD bundle to `dist/assemblyscript.js` (depends on [binaryen.js](https://github.com/AssemblyScript/binaryen.js)):
```
$> npm run build
```
2018-03-31 18:18:55 +02:00
This also builds a browser version of [asc](./bin) to `dist/asc.js` (depends on assemblyscript.js).
Running the [tests](./tests):
```
$> npm test
```
2018-03-31 18:18:55 +02:00
**Note** that freshly cloned copies of the compiler will use the distribution files, but it can also run [the sources](./src) directly through ts-node after an `npm run clean`, which is useful in development. This condition can also be checked by running `asc -v` (it is running the sources if it states `-dev`).