このあたり でベンチマークの結果が python に負けてるのもあってがっかり、みたいな話題に対して、id:tokuhirom さんが「チートぎみなのもあるからソースをよく読んで判断せよ」という話。http://d.hatena.ne.jp/tokuhirom/20091124/1259029688
探してみたら、misc/cgo/gmp/ 内に GMP の wrapper が入ってます。
An example of wrapping a C library in Go.
とは書いてあるけど、おあつらえ向きに pi.go という円周率を求めるサンプルコードも入っていたので、これを使って pidigits Go 6g 8g program を書き直してみた。
ソースコードはこちら。http://gist.github.com/241663
手元の環境 (Ubuntu-9.10 AMD64, AthlonX2 5400+) での実行結果。比較用に C の実行結果も。pidigits C GNU gcc #4 program
n=2000 Go(bignum) 2.141s Go(gmp) 0.172s C 0.110s n=6000 Go(bignum) 20.348s Go(gmp) 0.839s C 0.663s n=10000 Go(bignum) 64.630s Go(gmp) 2.472s C 2.160s
こんな感じで GMP を使えば、C よりちょっと遅いぐらいの速度になりましたよ。