Go言語公開一周年

Go言語が一歳になったらしいので記念にちょっと訳してみる。わりとヨサゲな言語になってると思うですよ。



http://blog.golang.org/2010/11/go-one-year-ago-today.html

Go: 一年前の今日

2009年11月10日、私たちはGoプロジェクト(単純さと効率に焦点を当てたオープンソースプログラミング言語)を開始しました。この一年間でGoプロジェクト自身とそのコミュニティの両方に多くの発展が見られました。

私たちは当初システムプログラミング、典型的にはCやC++で書かれるような類のプログラム、のための言語を作成することを目指していましたが、驚いたことにGoは汎用的な目的に使用できる言語になりました。CやC++Javaなどのプログラマの興味は得られるだろうとは思っていましたが、PythonJavaScriptのような動的型言語のユーザーからこれほど支持を得られるとは思っていませんでした。ネイティブコンパイル、静的型付、メモリ管理、軽量な構文などが組み合わされたGo言語は幅広いプログラミングコミュニティの交わりの心を打ったようです。

その交わりは熱心なGoコーダーの献身的コミュニティに育ちました。私たちのメーリングリストには3,800人以上のメンバーが参加し、毎月1,500を超える投稿があります。プロジェクトは130を超えるコントリビューター(コードやドキュメントを投稿した人)を持ち、公開してからなされた2,800以上のコミットのほぼ三分の一はコアチーム以外のプログラマによるものです。それら全てのコードを形にするためには、14,000近くのEメールが開発者用メーリングリスト上でやりとりされました。

これらの数値はプロジェクトのコードベースに成果として現れています。コンパイラは大幅に改善され、より早く、より効率的なコードを生成するようになり、報告されたバグが100以上修正され、幅広いOSやアーキテクチャがサポートされるようになりました。Windowsへのポーティングも献身的なコントリビューターのグループ(彼らの中の一人はGoogle以外での最初のコミッターです)のお陰で完成に近づいています。ARMへのポートも大きな進展を見せ、最近すべてのテストが通るマイルストーンに到達しつつあります。

Goツールセットも拡張と改良が進んでいます。Goドキュメントツール、godoc、は他のソースツリーのドキュメントもサポートするようになり(自分自身のコードをブラウズしたり検索できます)、"code walk"インターフェースを使用してチュートリアルの資料を表示できます(他にも多くの改良があります)。Goinstall(新しいパッケージマネージメントツール)を使うとユーザーは外部パッケージを一つのコマンドでインストールしたりアップデートできます。Gofmt(Go整形ツール)は今や可能であれば構文の簡略化まで行うようになりました。Goplay(ウェブベースの「文字を打つするごとにコンパイルする」ツール)はGo Playgroundにアクセスできないときに、Goでなにかを試してみるにはいい道具です。

標準ライブラリも成長を続け、42,000行を越えるコードと、20個の新しいパッケージを含みます。追加されたものにはjpegjsonrpcmimenetchansmtpパッケージに加え、たくさんの新しい暗号パッケージもあります。より全体的な話をすると、標準ライブラリは私たちのGoのイディオムの理解が深まるのに合わせて継続的に改良され改訂が進んでいます。

デバッグに関する状況も良くなりました。gcコンパイラのDWARF出力に関する最近の改良によってGNUデバッガ、GDB、をGoバイナリに対して利用でき、さらにデバッグ情報を完全にするために積極的に作業を進めています。(詳細については最近のブログポストを参照してください。)

Go以外の言語で書かれた既存のライブラリとリンクするのも、これまでと比べて簡単になっています。SWIGの最新リリース、バージョン2.0.1、にはGoのサポートが含まれ、CやC++とのリンクが簡単になりました。また、我々のcgoツールも修正と改良が重ねられています。

GccgoGNU CコンパイラのためのGoフロントエンド)はもうひとつのGo実装としてgcコンパイラに組み込まれています。今やガーベジコレクションも動作し、GCCコアにも受け入れられました。私たちはgofrontendGCCと完全に切り離されたBSDライセンスのGoコンパイラフロントエンド利用できるように作業を進めています。

Goプロジェクト自身だけでなく、Goは実際のソフトウェア構築にも使用され始めています。私たちのプロジェクトダッシュボードGoogle CodeGithubにリストされているGoプログラムやライブラリの数は200を超えます。メーリングリストIRCを見れば、Goを自身のプログラミングプロジェクトに利用しているコーダーが世界中にいることが分かるでしょう。(先月から続く実世界での例に関するゲストによるブログポストも参照してください。)Google内部でもいくつかのチームが製品となるソフトウェアを構築するのにGoを利用することを選択しましたし、Goを用いて大規模なシステムを開発している企業からのレポートも受け取っています。さらに私たちはGoを使ってプログラミング言語を教えている何人かの教育者とも連絡をとりあっています。

言語自身も成長を続け成熟してきています。昨年、私たちは数多くの機能リクエストを受け取りました。しかし、Goは小さな言語です。私たちは全ての新機能が単純さと便利さのほどよい妥協点になり得るように気を配っています。ローンチ後にもたくさん言語を変化させましたし、そのうちの多くがコミュニティからのフィードバックによるものです。

  • セミコロンは今やほぼ全てのインスタンスでオプショナルです。(仕様
  • 新しい組み込み関数copyとappendによってスライスをさらに効率的、直接的に管理できるようになります。(仕様
  • サブスライスを作るときに上限と下限は省略できます。つまりs[:]はs[0:len(s)]の短縮形です。(仕様
  • 新しい組み込み関数recoverはエラー処理機構としてpanicとdeferを補完します。(ブログ仕様
  • 新しい複素数型(complex、complex64、complex128)はある種の数値演算を単純化します。(仕様仕様
  • 複合リテラル記法によって(例えば二次元配列を指定するときに)冗長な型情報を省略できます。(2010-10-27リリース仕様
  • 関数の可変引数のための一般的な記法(...T)とその伝播(v...)が仕様に追加されました。(仕様仕様2010-09-29リリース

Goがすでに製品に使用可能であるということははっきりしていますが、改善の余地はまだあります。私たちが集中している直近のフィーチャーは、ハイパフォーマンスが要求されるシステムで利用できるようにGoプログラムをより早く、より効率的にすることです。要するに、ガーベジコレクターを改良し、生成されるコードを最適化し、コアライブラリを改良しているということです。また、私たちはさらなる追加機能として総称プログラミングをより簡単にするための型システムも調査中です。多くのことをがこの一年間に起こり、それはスリルに富んだものであると同時に満足の行くものでした。私たちは次の一年がこの一年よりもさらに実り多いものであることを願っています。

もしあなたがGo言語を[再び]試してみようと思っているなら、今こそやるべきです!情報を得るためにドキュメントGetting Startedページをチェックするか、そうでなければ単にGo Playgroundで遊びまくってもいいでしょう。