Google go で遊んでみた
goで遊んでみたよ!
インストール
Installing Go
にあるとおりにすれば問題なくインストールできた。
環境変数を準備
GOROOT=$HOME/go
GOOS=linux
GOARCH=386
export GOARCH GOOS GOROOT
Mercurial(入ってなければ適宜インストールする)でソースをチェックアウト
$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT
ビルド
$ cd $GOROOT/src
$ ./all.bash
試す
ざーっとドキュメントを見た感じ、C+GC+軽量プロセス的な言語。コンパイル&リンクするとネイティブコードを吐き出す。
よーくドキュメントを見るとクロージャもあることが分かる。
package main import "fmt"; func map_array(f func(int) int, array []int) []int { num := len(array); ret := make([]int, num); for i := 0; i<num; i++ { ret[i] = f(array[i]); } return ret; } func dump(i int) int{ fmt.Printf("[%d]\n", i); return i; } func main() { array := []int{1, 2, 3}; num := 1; map_array( dump, map_array( //インラインで関数オブジェクトを作り出せる。 func(x int) int { num++; return x * num; }, array )); dump(num); }
ただ、ジェネリクスとかはなく(interfaceを使って似たようなことはできる)、総称的なコンテナとかいわゆる関数型言語的なmap関数とかを作るのはちょっと面倒。実際、組み込みのcontainer/vectorパッケージにはIntVectorとかStringVectorとかそんなパッケージがあってがっかりする。
肝はたぶん軽量プロセスじゃないかと思う。そっちはまだ触ってない。