BiwaScheme is a Scheme interpreter written in JavaScript.
Works with web browsers (including mobile devices) and Node.js.
see http://www.biwascheme.org/
- http://www.biwascheme.org/repos/release/biwascheme-min.js (release version)
Just load biwascheme.js (or biwascheme-min.js) and write Scheme code.
<!DOCTYPE html>
<html>
<body>
<div id="bs-console"></div>
<script src="biwascheme.js">
(display "hello, world!")
</script>
</body>
</html>
-
$ npm install biwascheme
-
create a file a.scm:
(display "Hello, world!") (newline)
-
$ biwas a.scm
-
$ npm install biwascheme
-
create a file server.js:
var BiwaScheme = require("biwascheme"); BiwaScheme.run("(+ 1 2)"); // or // BiwaScheme.run_file("a.scm");
-
$ node server.js
- release/
- the following files are generated here with $ make
- biwascheme.js
- biwascheme-min.js
- node_biwascheme.js
- the following files are generated here with $ make
- demo/
- Demos
- src/
- deps/
- Dependencies (jQuery, underscore)
- system/
- Source code of the interpreter
- library/
- Built-in library functions
- platform/
- Platform dependent code (browser, node, etc.)
- deps/
- test/
- Unit tests
- tuplespace/
- (experimental) TupleSpace implemented in Scheme
- web/
- HTMLs and CSS of www.biwascheme.org
- www.biwascheme.org.js
- web server
Prerequisites:
- make
- sed
- node (Node.js)
- uglifyjs ($ npm install uglify-js -g)
Make compiles src/*.js into release/biwascheme.js.
$ make
- edit Makefile
- edit src/development_loader.js
TODO: fix this after migration to Heroku
- Edit History.txt
- Edit VERSION
- Edit node_modules/biwascheme/package.json
- $ make -B
- Make sure it is working:
- run tests
- open test/spec.html
- open test/spec.html#release
- open test/spec.html#min
- run test/browser_functions/
- $ cd test/browser_functions && node server.js && open http://localhost:7001/
- run demos
- demo/*
- open repl.html
- open website/i.html
- open test/tracer.html
- open test/tracer_auto.html
- try npm package
- $ npm install node_modules/biwascheme/ -g
- $ biwas -v
- run tests
- Commit and create tag ($ git tag x.y.z)
- Push changes to github with --tags
- Update website on web server (git pull)
- Publish npm package
- $ npm publish node_modules/biwascheme/
- Copy generated files (release/*.js, src/version.js) to web server
- copy src/deps/underscore(.string).js, too
jQuery:
- update src/deps/jquery.js
underscore:
- update src/deps/underscore.js
- update node_modules/biwascheme/package.json
underscore.string:
- update src/deps/underscore.string.js
- update node_modules/biwascheme/package.json
www.biwascheme.org is (going to be) hosted by Heroku.
Files for website is stored in the branch 'website'. This is almost same as master, but:
- contains compiled release/*.js and src/version.js
- contains Procfile for Heroku cedar
- has different package.json for Heroku
- has different favicon.ico (master: black, website: white)
You can run the website locally with Node and express.
$ make
$ npm install
$ node www.biwascheme.org.js
$ open http://localhost:7001
Interesting SRFIs
Partially implemented:
- 1 list libraries
- 13 string libraries
- 19 time
- 38 (write-with-shared-structure)
- 43 vector libraries
Not yet:
- 26 (cut)
- 39 (parameterize) is it identical to the one in R7RS?
Maybe:
- 41 stream
- 42 (list-ec)
- 44 collection
- 48 (format) (intermediate, ~d, ~b, etc.)
- 78 (check) -> list-ec
- 88 keyword (like 'test:')
MIT-LICENSE
-
Kent Dyvbig, Three implementation models for scheme
-
jsScheme
- http://alex.ability.ru/scheme.html (inavailable)
-
ExplorerCanvas (demo/excanvas.js)
https://github.com/biwascheme/biwascheme
Yutaka HARA (yhara) yutaka.hara.gmail.com http://twitter.com/yhara_en