[LSP42] LiveScript
(この記事はLISP Implementation Advent Calendar 17日目のためのエントリです。)
LiveScriptでLISPを作りました。
https://github.com/zick/LiveLisp
動機
今年の春、訳あって42個のプログラミング言語でLISP処理系を実装することになりました。これはその30個目です。
JavaScript系の言語(*)はだいたいやり尽くしたと思っていたのですが、調べてみたらLiveScriptという言語がまだ残っているのに気づいたのので使うことにしました。
(*) ここでは、JavaScriptに変換できたりJavaScriptの代わりに使えるような言語のことだよ、お兄ちゃん!
禁断の項目
LiveScriptのマニュアルを上から順に読んで、そろそろLISPを作るのに十分な知識が得られたかなと思ったところで、マニュアルにCoffeeScript to LiveScript Conversion Guideという項目があることに気付きました。
これだけ
CoffeeScriptで書いたLISPを、LiveScriptとして動かしてみたら、途中まで動いてエラーを吐いて止まりました。エラーメッセジを見て修正、というのを3回ほどしたら完全に動いてしまいました。
% cat lisp.coffee \ | sed -e 's/str\[\([^.]*\)\.\.\.\]/str\.substring\(\1\)/g' \ | sed -e 's/str\[\.\.\.\([^]]*\)\]/str\.substring\(0, \1\)/g' \ | sed -e 's/\.\.\./ til /g' > livelisp.ls
CoffeeScriptの [from...end]
というrangeの構文を [from til end]
に変えたのと、CoffeeScriptで部分文字列の取得にrangeの構文を使っていたのをsubstringというメソッドを呼ぶように変えただけです。
小学生並みの感想
これは酷いと思いました。