BiwaScheme 1.0.0に向けて
BiwaSchemeはもともと修論のために作り始めた処理系なんだけど、ということは、来年で10周年になるということに気がついた。途中、放置してた期間もそこそこあるけど、issue/PRくらいは対応しようとしているうちになんだかんだで10年。10年かぁ…。
せっかくなので、来年に1.0.0をリリースしようかなという気分が高まってきた。というかもう1.0.0にしちゃおうかなとも一瞬思ったのだけど、バージョニング的には非互換を入れやすいタイミングなので、何を入れるかについてもう少し検討することにした。
Schemeプログラムの読み込みについて
現状のBiwaSchemeで一番直したいと思うところがSchemeプログラムの記述方法にあって、以下は例なんだけども、
<script src="biwascheme.js">
(display "hello")
</script>
これがですね、対象となるscriptタグの検知を正規表現で行っているので、biwascheme.jsをa.jsとかにリネームするとSchemeプログラムが実行されなくなるのである。(昔はbiwascheme.jsから自分のscriptタグを検知して中身を取り出すようになっていたのだけど、prototype.js(懐かしいですね)からjQueryに移行したタイミングでsrcを見る実装に変わったのだった)
BiwaScheme 1.0.0ではユーザプログラムについては以下のように個別のscriptタグを書いて、type属性でBiwaSchemeプログラムであることを明示することを考えている。
<script src="biwascheme.js"></script>
<script type="text/biwascheme">
(display "hello")
</script>
というだけなら簡単な話なのだけど、まだ実装していないR7RS仕様の一つにlibrary importというのがあるので、それとの整合性も考えておかないといけない。将来的にR7RS libraryを実装したときは以下のようにするつもり。data-library属性でライブラリ名を指定し、data-libraryがないやつをmain的なものと見なす。
<script src="biwascheme.js"></script>
<script type="text/biwascheme">
(import (scheme base) (myapp user))
</script>
<script type="text/biwascheme" data-library="(myapp user)">
...
</script>
<script type="text/biwascheme" data-library="(myapp api-client)" src="api-client.scm"></script>
R6RS・R7RSの非互換部分
R6RSとR7RSは実は互換性がなくて、たとえばdefine-record-typeの引数の仕様が全然違ったりする。現状のBiwaSchemeのdefine-record-typeはR6RSのものなのだけど、どこかではR7RSにしたい。
ということで前述の<script type="text/biwascheme">
形式を使った場合はR7RSモードになる、という仕様を考えている。これなら後方互換性が保たれるのでわりと良いんじゃないか。
syntax-rules
これはちょっと間に合うか分からないけど(BiwaScheme以外にもやることがあるのでね)、syntax-rulesの実装についてぼちぼち調べているので、来年に間に合ったらいいな。