2010-10-15

GDD2010 -- プログラミング言語 Go

講演者は鵜飼文敏氏。

プログラミング言語 Go

Go は Google が設計・開発したプログラミング言語。2009-11-10 公開。現在、125 人のコントリビューターがいる。

鵜飼氏は「Go」のことを「ゴー」と伸ばさず、「ゴ」と短く発音していた。

Go の思想

Go の理想は、今の世界に合った言語を作ること。今あるプログラミング言語は大きく分けて 2 つの主流があるので、その良い所どりをした言語を作りたい、とのこと。その主流のプログラミング言語は次の通り:

  • C, C++, Java (コンパイル系言語; 型安全が保証される; 開発の進みが遅い)
  • Perl, Ruby, Python (ライトウェイト言語: 動的言語; 開発の進みが速い)

具体的には

  • 静的型付け・型安全
  • ダック・タイピング
  • 短いコンパイル時間
  • 大規模プログラミング
  • ネットワーク対応
  • マルチコア対応

これらを前提にしたプログラミング言語を作りたいという。まあ、確かに魅力的。

The Go Playground

Go のホームページにはテキスト・ボックスがあって、その場で Go 言語のコンパイルを試せるやうになっている。是非、遊んでみて欲しいとのこと。

お題: 簡単な電卓を作る

簡単なお題と言って、鵜飼氏は 30 分程で電卓を作ってみせた。正直、速すぎてコードが追えなかった。

面白いと思ったのは、Go が多値を返せること。普通の言語だと return 文で返せる値は一つだけ。ところが Go は 2 つの値を返すことが可能。これを使うと、関数の実行に成功したかどうかをスマートに書ける。例えばこんな風に

  line, err := in.ReadBytes('\n')
  if err != nil { break }
  fmt.Println(String(line))

C なんかだと、失敗した時は -1 を返すとか色々ルールがあって、C 言語のマナーに精通しないと分からないコードが出来やすかった。かういふ二値が返ると、さういふ「イディオム」が少なくなって、初心者への敷居が低くなる。良いね。

この他、色々とためになることを教わったけど、示されたコードと一緒に説明しないと伝わらなさそうなので、ポイントだけ列挙するにとどめる。

  • int 型の他に、int8, int16 型などもあり。これらの自動変換は起きない。
  • スライスは配列に使うポインター。長さを変えられる配列?
  • バイトの配列と文字列は全くの別物
  • 文字列は読み込み専用。utf8。中身は byte 列だけど、作り変えられている。
  • interface ではメソッドを受け取れる型を定義する。コーディング時 implements は書かなくて良い。
  • defer, recover, panic は Go 版 try-catch

あとがき

多値が返せるって所で Common Lisp みたい、と思って Go に惚れた。時間があったら、ちゃんと勉強してみたいな。

No comments:

Post a Comment