昨晩 lestrrat さんが go-nuts デビューした。
[ANN] Xslate template engine for golang
https://groups.google.com/d/msg/golang-nuts/bajxDXEsixk/OdRjXgkc5oYJ
lestrrat/go-xslate - GitHubgolang で書かれた xslate というテンプレートエンジンのポーティング。See Supported Syntax (TTerse) for what's currently available Debugging Currently the error reporting...
https://github.com/lestrrat/go-xslate
Xslate - Scalable template engine for Perl5なんと現時点でDistributions Text::Clevery - Smarty compatible syntax and functions Text::Xslate::Bridge::Alloy - U...
http://xslate.org/
html/template
よりも速いとの事。すばらしい。テンプレートエンジンの中では小さな VM が動いてる。とてもカッコイイ。
それを聞いて、僕も言語処理系を書きたくなって、家に帰ってからもモヤモヤして寝れなかった。えいや!とばかりに僕も言語処理系を書いてみた。
mattn/anko - GitHubJavaScript っぽいような、Golang っぽい様な言語です。
https://github.com/mattn/anko
以下の様なスクリプトが動きます。
# declare function勢いで書いたので、開発継続するかとか、この後どうするかとか、何も考えてません。現状、計算くらいしか出来ません。
func foo(x){
return x + 1;
}
# declare variables
var x = 1;
var y = x + 1;
# print values
println(x * (y + 2 * x + foo(x) / 2));
# if/else condition
if (foo(y) > 1) {
println("こんにちわ世界");
} else {
println("Hello, World");
}
# array type
var a = [1,2,3];
println(a[2]);
println(len(a));
# map type
var m = {"foo": "bar", "bar": "baz"};
for k in keys(m) {
println(m[k]);
}
ですが言語処理系を作る方法のサンプルとしては、誰かの役に立つかなーと思ったので公開しておきます。
追記
ちなみに anko という名前は、ふざけて「unko」にしようと思ったけど、いいのが思いつかずに「そう言えば昨晩、アンドーナツをアテに酒飲んでたなー」という安直な発想で付けました。