2010年07月27日

GoogleのGo言語のソースを見てみた

Googleの発表したプログラミング言語Goはソースが公開されています。

この言語の特徴などは他のサイトをみてもらうこととして、ここではソースをながめて気がついたことを紹介します。

(2009年12月の段階で書いたものを下書きのまま置いておいたのですが公開することにしました。もしかしたら内容が古くなっていることがあるかもしれません。)



2種類のGo

Goの処理系には2種類あるそうです。ひとつはPlan9由来のオリジナルのもので、もうひとつはgccのフロントエンドとして実装されたものです。

今回インストールしたのは前者のほうなので、ここではこちらをメインに紹介します。

なお、gccのフロントエンドとして実装されたものは現状(2009年12月の段階)では以下のような制限があるそうです。

  • ガベージコレクションが実装されていない
  • スレッドのスタックサイズは固定
  • 同時に生成できるgoroutineの個数に制限がある

2010.7.30追記

gccgoでガベージコレクタをオンにするパッチが投げられました。

インストール

まずはインストールです。

このページの手順に従ってソースを入手してビルドします。Ubuntu 9.04 (x86_64)のマシンで問題なくインストールすることができました。

ビルド自体はall.bashというシェルスクリプトで一発でしたが、そのログをみてみると以下のようなことをしていました。

  • 前回の生成物を全て削除 (clean)
  • gccでライブラリをビルド: lib9, libbio, libmach
  • gccでツールチェインをビルド(上記のライブラリを使用)
    • リンカ (6l)
    • アセンブラ (6a)
    • Cコンパイラ (6c)
    • Goコンパイラ (6g)
    • その他のコマンド (gopack, nm, cov, godefs, prof)
  • Goのパッケージをビルド
    • Goで書かれているファイルは6gでコンパイル
    • Cで書かれているファイルは6cでコンパイル
  • Goで書かれているコマンドのビルド
  • テスト (各パッケージごとと全体)

このようにツールチェインからまるごと作っているわけですが、これだけのことがたったの2分で完了しました。

ソースを探検してみる

アセンブラ、リンカ、Cコンパイラは本当にシンプルなものでCコンパイラはたかだが30個のソースファイルです。

普通に見慣れているGNUのbinutils, gccのビルドに比べてあまりにシンプルすぎて不安になるほど。

これらは全てBSDライセンスで提供されているので、これらを修正して使ってもGPLのようにソース開示の義務は発生しません。

Cコンパイラは純粋のCでC++の拡張は入っていません。(gccはCとC++とobjetive Cなどを統合してしまっているのでCの部分でも相当の拡張が入っています。)

よく言えばまだ手垢にまみれていない、純粋なコードです。コンパイラの勉強をするにはちょうどいいかもしれません。



トラックバックURL

コメント一覧

1. Posted by R-7   2015年01月14日 21:05
GPLでも修正して使う分にはソース公開の義務なんて発生しないと思います。

修正版を公開する時はGPLに対して新たな制限を加えちゃ駄目ですが、公開するかしないかは修正した人が決めることです。
2. Posted by 若槻   2015年01月26日 09:28
コメントありがとうございます。
当時この記事を書いた担当者は、現在は弊社に在籍していないのですが、おっしゃる通りだと思います。(バイナリを頒布しない限り、ソース公開の義務は発生しない。)

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード