@ishikawa-masashi/shenscript v0.2.5
Shen for JavaScript
An implementation of the Shen Language by Mark Tarver for JavaScript. Full documentation can be viewed at shenscript.readthedocs.io.
Features
- Allows integration with arbitrary I/O.
- Async operations are transparent to written Shen code.
- Easy interop: JS can be called from Shen, Shen can be called from JS.
- Fairly small production webpack bundle (~370KB uncompressed, ~60KB gzip compressed).
- Decent web startup time (~50ms in Chromium, ~100ms in Firefox).
Prerequisites
Requires recent version (10+) of Node.js and npm.
Works in most modern browers (Chromium, Firefox, Safari and Edge).
Building and Testing
First, run npm install as you would with any other Node project. Then run the following scripts build and test the project. Steps need to be run in order - steps after fetch-kernel won't work if the kernel hasn't been fetched.
| Script | Description | 
|---|---|
| test-backend | Runs mochatests for the basic environment and compiler. | 
| fetch-kernel | Downloads the kernel sources from shen-sources to kernel/. | 
| render-kernel | Translates the kernel sources to JavaScript and stores under kernel/js/. | 
| test-kernel | Runs the test suite that comes with the Shen kernel. | 
| test-frontend | Runs mochatests for helper and interop functions. | 
| bundle-dev | Applies babel transforms and webpack's into web-deployable bundle. | 
| bundle | Builds bundle in production mode. | 
| bundle-min | Builds minified production bundle. | 
| bundles | Generates all bundles. | 
| lint | If you make changes, run lintto check adherence to style and code quality. | 
Running
Demo Page
Run npm start to start webpack watch or npm run bundle-dev to do a one-time build.
If you open index.html in your browser a basic webpage will load, and when ready, it will display the load time. (The production webpack bundle does not automatically create a Shen environment and does not log anything.) index.html should be viewable without hosting in a web server, but you will not be able to use the load function to load additional Shen code if opened from a relative file:// path. http-server is adequate for hosting in a web server.
If you open the JavaScript console in the developer tools, it is possible to access to the $ global object and execute commands:
$.exec("(+ 1 1)").then(console.log);Chaining the then call is necessary because exec will return a Promise. For more information refer to the documentation.
REPL
Run npm run repl to run a command-line REPL. It should have the same behavior as the shen-cl REPL. node. functions will be available. Run (node.exit) to exit the REPL.
Neither command-line options nor the launcher kernel extension are implemented. ShenScript is not intended to take the form of a standalone executable.