2009年12月07日
Google Go の歴史
ET 2009 のパネルディスカッション「組込みマルチコア技術の着地点は見えたか? Part 2」で、辻さんが少し Google の Go というプログラミング言語に触れていました。
この言語はいきなりぽっと出てきたわけではなく、ベル研究所におけるポスト UNIX としての長い研究の歴史があります。(そもそも、Ken Tompson 氏、Rob Pike 氏などの Plan9 の有名人が直接関わっています。)
この言語はいきなりぽっと出てきたわけではなく、ベル研究所におけるポスト UNIX としての長い研究の歴史があります。(そもそも、Ken Tompson 氏、Rob Pike 氏などの Plan9 の有名人が直接関わっています。)
ざっと振り返ると、UNIX から 40 年、Plan9 から 30 年近くにわたる、以下のようなプラットフォームと言語の流れがあります。
UNIX、C (70 年代後半〜)
↓
Plan9、Alef (80 年代中盤〜)
↓
Inferno、Limbo (90 年代中盤〜)
↓
Google、Go (2009 〜)
Plan9 の Alef や C の thread ライブラリ、Inferno の Limbo は、ホーアの CSP (Communicating Sequential Processes)という並行プログラミング言語と理論 (並行システムの仕様記述言語) の影響を強く受けており、それが Go にも受け継がれています。
Alef は (途中からメンテナンスされなくなり、消えてしまったのですが) C に似た言語で、ADT (Abstract Data Type) や、言語レベルでのスレッド(ただし process と呼ばれます) などの機能が拡張されています。
Limbo は Alef の機能をほぼ受け継いだ上に、バイトコードにコンパイルされ、仮想機械 Dis の上で実行され、GC を備えたという、Java に似た言語です。チャネルという CSP 由来の概念を多用するマルチプロセスプログラミングが特徴的です。
このように見てみると、Go は Alef と Limbo の中間的な特徴 (良く言えば現実的、悪く言えばあまり面白くない) を持った言語という印象を受けます。既存の C ライブラリとリンク可能ということで、より現実的な言語になっていると思います。
ちなみに、Go のコンパイラやアセンブラの命名センス (x86 版は、コンパイラが 8c、リンカが 8l で a.out が 8.out) も、Plan9 譲りです。(ただし、8c が 8g に変わっています。) 。
Plan9 については、検索すればネット上にもそれなりに情報があります。しかし、より Go に近いと思われる Inferno と Limbo についてはほとんど情報がありません。
そんな中、Plan9 日記の oraccha さんが示されていた、この bit の記事は貴重な情報源だと思います。Inferno、そしてそれに至るまでの歴史を知ることにより、Go についてより深く理解することができると思います。
コンピュータサイエンス誌「bit」February '98 /Vol.30, No2 Inferno特集
追記: NewSqueak は知らなかったです。参考になります。
Plan 9 で Web プログラミング
UNIX、C (70 年代後半〜)
↓
Plan9、Alef (80 年代中盤〜)
↓
Inferno、Limbo (90 年代中盤〜)
↓
Google、Go (2009 〜)
Plan9 の Alef や C の thread ライブラリ、Inferno の Limbo は、ホーアの CSP (Communicating Sequential Processes)という並行プログラミング言語と理論 (並行システムの仕様記述言語) の影響を強く受けており、それが Go にも受け継がれています。
Alef は (途中からメンテナンスされなくなり、消えてしまったのですが) C に似た言語で、ADT (Abstract Data Type) や、言語レベルでのスレッド(ただし process と呼ばれます) などの機能が拡張されています。
Limbo は Alef の機能をほぼ受け継いだ上に、バイトコードにコンパイルされ、仮想機械 Dis の上で実行され、GC を備えたという、Java に似た言語です。チャネルという CSP 由来の概念を多用するマルチプロセスプログラミングが特徴的です。
このように見てみると、Go は Alef と Limbo の中間的な特徴 (良く言えば現実的、悪く言えばあまり面白くない) を持った言語という印象を受けます。既存の C ライブラリとリンク可能ということで、より現実的な言語になっていると思います。
ちなみに、Go のコンパイラやアセンブラの命名センス (x86 版は、コンパイラが 8c、リンカが 8l で a.out が 8.out) も、Plan9 譲りです。(ただし、8c が 8g に変わっています。) 。
Plan9 については、検索すればネット上にもそれなりに情報があります。しかし、より Go に近いと思われる Inferno と Limbo についてはほとんど情報がありません。
そんな中、Plan9 日記の oraccha さんが示されていた、この bit の記事は貴重な情報源だと思います。Inferno、そしてそれに至るまでの歴史を知ることにより、Go についてより深く理解することができると思います。
コンピュータサイエンス誌「bit」February '98 /Vol.30, No2 Inferno特集
追記: NewSqueak は知らなかったです。参考になります。
Plan 9 で Web プログラミング