2009-11-12

Go - A Programming Language

Google で作られた新しいプログラミング言語。とりあえず Rob Pike の TechTalk を見てみた。約1時間。軽い気持ちだと最後まで見通せないぞ。英語だし。早口だし。むしろ、じっくりスライド(PDF)を見た方が良いかも。

最初は、とくに表記の仕方に戸惑った。なんと、型を変数名の後に書く。違和感ありまくりだったが、しばらく見ていると慣れるものだね。読むだけなら、これはこれで読みやすいかも、と思い始めている。書くとなったら、しばらく混乱しそう。

↑の Tech Talk 中で説明される言語の特徴、機能の中では、channel がおもしろそうだと感じた。

The Go Programming Language Specification
A channel provides a mechanism for two concurrently executing functions to synchronize execution and communicate by passing a value of a specified element type.

簡単に言ってしまえば、queue が言語に作り付けになっている、ってこと。queue は、ごくおおざっぱに言えば、右から入れたものが左から取り出せる筒のようなもの。すぐに取り出しても良いし、後で取り出しても良い。入れた人と取り出す人が別でも良い。入れた後、すぐに別のことを始めても良いし、取り出されるまで待っていても良い。取り出す人は筒がからっぽなら誰かが入れてくれるまで待つ。並列プログラミングのための仕組みだ。

この queue、Ruby だとクラスライブラリとして実現されている。用途はまさにスレッド間通信。

↑の Tech Talk で説明されていたマルチサーバの例で、この channel が使われていた。2 本の channel を使って、処理リクエストとサーバの制御(停止)を実現していた。mutex を使って共有変数を仕立てるなんていうのは primitive すぎるのだね、と目からウロコが2、3枚落ちた。

関連サイト

0 件のコメント:

コメントを投稿