2009年11月10日(東京時間の11日)、グーグルはCのようにシステム記述に適したプログラミング言語「Go」を公開した。BSDライセンスである。
コンピュータ業界には一方でC/C++の複雑性を排除したJavaやC#が登場したり、最近ではPythonやRubyなどのスクリプト言語が人気となるなど、新たな方向性が模索されつつある。Googleの「Go」では、C++言語のようのCからの拡張ではなくて、構文は似て、Javaと同じのガベージコレクタ(GC)や並列プリミティブ実行時リフレクションなどを備えた新しい設計が目を引く。
Goはシステム記述向けを念頭に設計されているが、フロント・エンドのソフトウェアでも生産効率の高いプログラミングができるだろうとしている。
まずは「有名」な「Hello、世界!」のサンプルソースを見ましょう。
- package main
- import fmt “fmt” // Package implementing formatted I/O.
- func main() {
- fmt.Printf(”Hello, world; or Καλημέρα κόσμε; or こんにちは 世界\n”);
- }
コンパイルと実行結果:
- $ 6g helloworld.go # compile; object goes into helloworld.6
- $ 6l helloworld.6 # link; output goes into 6.out
- $ 6.out
- Hello, world; or Καλημέρα κόσμε; or こんにちは 世界
- $
文法体系はシンプルですね。
以下のメインの特徴がある。
●数十万行を数秒で高速ビルド
3000行のライブラリが200ミリ秒、正規表現やGC、並列処理、RPC、数学関連などを含むGoの標準ライブラリ全体(12万行程度)でも9秒でmakeが終了するという速さだ。
●ポインタ演算の排除、GCの導入
生産性の上でC言語が抱えている問題は、ガベージコレクタがなくメモリ管理がプログラマに任されていること、ポインタや配列の仕様が混乱を招きがちなことの2つが大きい。GCの採用は大きな一歩だ。
●JavaやC++よりもオブジェクト指向的
Goにはクラスや継承といった概念はないが、「GoはJavaやC++よりも、ずっとオブジェクト指向的な言語だ」(パイク氏)という。実際、ドット記法によるメソッドの呼び出しに似た文法で、特定の型に紐付いた関数を呼ぶことができる。
●独自の並列処理の抽象化
Goで注目すべきなのは、並列処理を念頭に設計されていることだ。Goではmutexやロックといった機構のほかに、抽象度の高い“ゴールーチン”(Goroutines)や“チャンネル”(Channels)といった仕組みを備えている。
●Cっぽくて違和感なし、Cの面倒さなし
Goは表面上はCのように見えるが、スクラッチからやり直したC++とも言えるプログラミング言語だ。独自の型システムや並列処理のプリミティブなど、かなりラディカルにCとは異なっている。一方、そのジョークのような名前に反して、すでに基本的なライブラリが存在しており、UTF-8対応の正規表現ライブラリも存在するなど、実用を強く指向している。
【関連リンク】
・http://golang.org/ 公式サイト
・http://googlecode.blogspot.com/2009/11/go-new-programming-language.html グーグルのブログ
Posted on Wednesday, 11th November 2009 by admin
Tags: Go, Google, グーグル, プログラミング
Posted in ニュース | Comments (0) | 1,629 views
