最近個人的に興味を持っているのがGoogleのGo言語です。今年に入ってからぼちぼち勉強がてら軽く使ってみているのですが、少し癖はあるものの悪くありません。さほど高速ではありませんが、丁度C言語とスクリプト言語の間の隔たりをカバーできそうな感じです。
go言語のコンパイル/インストールは本家ページのInstalling Goを見ればとても簡単です。リポジトリは積極的にアップデートされているのでたまに問題があることもあるかもしれません。続けて使うなら時折"hg pull ; hg update"して"make"しておいたほうがよさげです。本家でのサポートが決まったということで期待のgccベースのgccgoはコンパイルに結構時間がかかる上、GCがまだとのことなので様子見です。
で表題の件ですが上のページを発見。go付属のライブラリを使ってx11に絵を描くサンプルを公開されています。これはと思い早速Macでも試そうとしたところexpのx11がないと宣われてしまいました。
少し調べてみると"muddy brown thang"さんのサンプルにも少し修正は必要そうなものの、ext/draw/x11がそもそもコンパイルされていない模様。手動でmake && make installしてみても"unsupported DISPLAY"などと言われ動作しません。
ライブラリをチラ見するとUnixドメインソケットが半分決め打ちになっています。仕方がないのでちょこっと以下のようなパッチをでっち上げてみました。
diff -rw x11.orig/auth.go x11/auth.go
10a11,12
>
> "strings"
15a18,37
> if strings.Index(d,"/tmp/launch") >= 0 {
> return d
> }
> if len(d) < 1 || d[0] != ':' {
> return ""
> }
> i := 1
> for ; i < len(d); i++ {
> if d[i] < '0' || d[i] > '9' {
> break
> }
> }
> return "/tmp/.X11-unix/X" + d[1:i]
> }
>
> func getDisplayNum() string {
> d := os.Getenv("DISPLAY")
> if strings.Index(d,"/tmp/launch") >= 0 {
> return "0"
> }
27a50
>
75c98
< display := getDisplay()
---
> display := getDisplayNum()
diff -rw x11.orig/conn.go x11/conn.go
456c456
< s, err := net.Dial("unix", "", "/tmp/.X11-unix/X"+display)
---
> s, err := net.Dial("unix", "", display)
$GOHOME/go/src/pkg/exp/draw/x11に入って上のパッチを適用。手動で
make
make install
以上。
パッチはいい加減ですがめでたくX11に円が表示されました。
まだ余り調べていませんがCとはリンクできるみたいなので、Objective Cとのリンク方法を調べてみて、うまくいけたらCocoaとの連携、armバージョンでiPhoneアプリが作れたりしたら面白いかもしれません。