# AP Pseudocode Interpreter
Includes:
- Rust library
- Command line interface
- Web interface
## Building
### Web Interface
Need installed: cargo, rust, npm
1. Install [`wasm-pack`](https://rustwasm.github.io/wasm-pack/installer/)
2. Install `cargo-generate`:
```
cargo install cargo-generate
```
3. Initialize javascript setup from inside `web/www`
```
cd web/www
# if doing for first time
#npm init wasm-app www
cd www
npm install
```
4. Run with
```
npm run start
```
### Serving Statically
It is possible to build this so that you can serve all the file statically.
First, run `npm run build` to put the files in `web/www/dist`, then serve the `dist` directory.
Make sure that your webserver (e.g. nginx) is attaching the `application/wasm` MIME type for the `.wasm` resources.
You can enforce this in nginx by adding the following line to `/etc/nginx/mime.types`:
```
application/wasm wasm
```
## TODO
- [ ] list:
- need to implement lists as a reference type
- rather than embedding the backing Vec inside the Value enum, embed a reference to the Vec that is stored in a Scope environment
- this would require expanding the Scope nevironment to hold references, likely in a separate dictionary?
- [x] negative numbers
- [x] negation
- [x] NOT
- [ ] native functions: implement in Rust
- [X] CONCAT
- [ ] SUBSTRING
- [X] RANDOM
- ~~[ ] DISPLAY (?)~~
- [ ] robot stuff
- [ ] stepped execution