インストール不要でブラウザ上からSchemeを試せるサイトscheme.contellas.comを作った

Common LispでWebアプリケーションを作る練習として、簡単なSchemeの開発環境的なものを作った。

  • Javascript製のSchemeインタプリタBiwaschemeにエディタ(CodeMirror)をつけたもの
  • HTML5の機能を使っているので対応したブラウザが必要 (ChromeFirefox、IE11で確認済)
    • 書いたコードをブラウザのローカル領域に保存できる(Local Storage)
    • Schemeインタプリタは別スレッド(Web Worker)で動いており、無限ループに入ってしまったときなどにSchemeインタプリタだけ再起動できる(Killボタン)
  • 評価
    • 何も選択せずにEvalボタンを押すとファイル全体が評価される
    • 領域を選択してEvalボタンを押すとその領域が評価される
    • 括弧にカーソルを合わせてハイライト表示させた上で Ctrl+J でその式だけを評価できる(式単位の評価)
  • 自動インデント
    • Returnで改行するとその時点で適切な位置に移動する
    • Tabを押すとその行がインデントされる
    • 領域を選択してTabを押すとその領域がインデントされる
  • ファイル操作
    • Newボタンでファイルの新規作成
    • ファイルを選択した状態でRenameで名称変更、Deleteで削除ができる
    • 何かコードを評価したときや、ファイル操作をしたタイミングで状態が自動保存される
    • 右上の設定ボタンからClear localStorageを選ぶとブラウザに保存されていた情報が全て削除される

Schemeインタプリタの仕様はBiwaschemeのサイトを参照。R7RS対応とされているがマクロ定義は伝統的マクロだったりと少し異なる部分もある。
BiwaschemeではSchemeインタプリタからJavascriptのコードも呼べるが、Web Worker上で動いているのでSchemeインタプリタからJavascriptを呼んでもDocumentやWindowはいじれない。

TODO

  • (load "file-name") で localStorageからファイルを読み込めるようにする
  • ファイルをzipでまとめてダウンロードできるようにする
  • カラーテーマ、キーバインドの設定などの個人設定
  • 領域でコメント、アンコメント