BiwaScheme
Javascriptで書かれたScheme処理系です。
BiwaScheme
公式サイトは http://www.biwascheme.org/ です。以下の情報は古いかも知れません。
デモ
- 動作デモ
- 上のテキストエリアにS式を入力するか、右のサンプルコードをクリックし、evalボタンを押してください。
- 実行結果とコンパイルされた中間コードが表示されます。
- JSSpecによるユニットテスト
- ユニットテストです。JSSpecを利用しています。JSSpecは設置が非常に簡単(解凍してサンプルを書き換えるだけ)で、デフォルトでこのようなグラフィカルな実行環境がついてくるので、非常にお薦めです。
- 動作確認用テスト
- 開発用のテスト環境です。処理系の動作を1ステップごとに追うことができます。
- 同じテストがコンソールからも行えるようになっています。
- SpiderMonkey: ./spidermonkey.sh
- CScript.exe: cscript console_test.js
- 実行されるコード自体はconsole_test.jsに書きます。browser_test.htmlはこれを読み込んでいます。
- Hello World
- scriptタグの中にS式を書くだけで実行されるようにしてみました :-)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>Hello World</title> </head> <body> <div id="biwascheme-console"></div> <script src="biwascheme.js"> (display "Hello, World!") </script> </body> </html>
ダウンロード
- アーカイブ (リリース版)
http://www.biwascheme.org/download.html
動作を確認している環境
最新のブラウザならたいてい動くと思います。
ユニットテストが100%だったら大丈夫です。
仕様
あるもの:
- 普通の構文(ifとかletとかlambdaとかset!とかcall/ccとか)
- 普通でない構文(let1, when, unless)
- 標準関数のだいたい
- ライブラリの一部分
ないもの:
- 構文
- vectorのquasiquoteなど
- 言語機能
- 複素数、有理数、非正確数、エラー処理、dynamic-wind、define-syntaxなど
- 関数
- procedure?、数値関連の関数(logとか) など
jsSchemeとの違い
(2009/4/5追記:JSのlisp実装の中では一番のライバルだったjsSchemeですが、現在はリンク切れで見られないようです…。)
機能 | jsScheme | BiwaScheme |
---|---|---|
実行方式 | インタプリタ/JIT | 中間コード |
モデル | ヒープベース | スタックベース |
速度 | △ | ○ |
call/cc | ○ | ○ |
構文 | ◎ | ○(だいたい実装した) |
標準関数 | ◎(R5RS) | ○(R6RS、普段使いそうなものはもうある…と思う…) |
マクロ | ○(syntax-rules、ちょっとあやしい?) | ○(define-macro) |
あとjsSchemeはR5RSベースですが、BiwaSchemeはR6RS準拠を目指しています。 目標時期は「R7RSが策定されるより前」とされています。{{fn "ちなみにR6RSの策定には9年かかりました"}}
その他
メモ
BiwaSchemeはKent Dyvbigの「Three implementation models for scheme」 の4章を参考に作られています。
4章を読んでいるときに書いたメモを公開します(Reading3imp.pdf)。これから 3imp.pdfを読む人の参考になるかも知れないし、ならないかも知れません。
- 合わせて読みたい:ひげぽんさんの日記
heapbase.js
BiwaSchemeを作る前に、3章ベースで作ってみたものです。環境をリストではなく辞書で作ってしまったので、3章最後の改良が実装できなくて放置。
名前の由来
Biwaは琵琶湖の「びわ」から取りました。就職で地元を離れることが分かっていたので、 滋賀県で作る最後のプロダクトということで。
View on github | Report issue