# 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