yhara.jp

Recent Posts
Edit

BiwaScheme 1.0.0に向けて

2016-10-07
Tech

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の実装についてぼちぼち調べているので、来年に間に合ったらいいな。


More posts