Quantcast
Channel: Big Sky
Viewing all articles
Browse latest Browse all 121

Pure Golang でスクリプト言語の VM 書いた。

$
0
0
あんこ

昨晩 lestrrat さんが go-nuts デビューした。
[ANN] Xslate template engine for golang
https://groups.google.com/d/msg/golang-nuts/bajxDXEsixk/OdRjXgkc5oYJ
lestrrat/go-xslate - GitHub

See Supported Syntax (TTerse) for what's currently available Debugging Currently the error reporting...

https://github.com/lestrrat/go-xslate
golang で書かれた 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 - GitHub
https://github.com/mattn/anko
JavaScript っぽいような、Golang っぽい様な言語です。
以下の様なスクリプトが動きます。
# 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」にしようと思ったけど、いいのが思いつかずに「そう言えば昨晩、アンドーナツをアテに酒飲んでたなー」という安直な発想で付けました。

Viewing all articles
Browse latest Browse all 121

Trending Articles