プログミング言語とGoの歴史

プログミング言語とGoの歴史

Goができるまで

2009→2019年の振り返り

  • それだけでなく1960→2007年までの経緯、いままで、これからの3部構成で話します

1960から2007年

  • 1960年代はHWごとに言語が存在した
    • プログラミング言語バベルの塔があるくらい
    • そのためパリでALGOLという共通の言語を作った
    • AlanPerlisさんが言った。精査が大変だったが13人の化学変化は素晴らしかった

history of Concurrency (並行処理の歴史)

  • 最初はミューテックスから始まった
  • メッセージパッシングのさきがけ
  • 1978にトニーホアーさんがCSPの論文発表
  • バッファーなしでプロセス間のやりとりを提案

2007から2009(Goの開発経緯)

  • C++buildですら45分かかるプログラムがあった
  • ロブ・パイクさんがこんなに時間が掛かってよいのかと考えた
  • ある日C++11のテックトークに参加した
    • そこでどういった機能をいれるかの話が上がった
    • そんなに機能がいるのかなとロブさんが思った
  • C言語開発者ケントンプソンの紹介
  • CSP→Newsqueak、Algol→Cへとつながった
  • Go言語をケン・トンプソンさんとロブ・パイクさんが作った
  • Go言語は出た当初、それまでの言語の機能を削ったため批判があがった
  • ジェネリクスがなかった
  • ただこの経緯はALGOLの時と同じだという考えがある
  • Goは新しい機能をいれるのをNoと言ってるのは、新しいアイデアが生まれるまでまつから
    • どうなるまでまつか→シンプルまで
    • どうやっってシンプルと判断するか→誰かがNoと言わなくなるまで

Goできてから(OSSの歴史)

2009

  • 2009:はmakefileが必要だった(6g/8g/5gなどコンパイラ指定)
  • このときgoApp,Herokuがあった(Paas)
  • Gofmt,gotest,godoc

2010

  • Gogetに相当する go install
  • Prof
  • govet
  • Sliceにappendができるようになった
  • The Go Blogが開通
  • Iaasが復旧

2011

  • gofix
  • go install (今のgo build)
  • ‘go`コマンドができるようになった

2012

  • ge get
  • Go tool x(6g 8g 5gビルドなどの整備)
  • この年compatibility promise

2013

  • Go1.1
    • 30から40%speed up for build
  • Go 1.2
    • encoding

2014から2019

2014

  • Go1.3 gc効率が50%から70%削減
  • Go1.4 runtimeがCからGoになった
  • Golang/dep
  • パッケージ管理ツールがたくさんでてきており、ここで公式にdepをだした
  • この時k8sができた

2015

  • Cだと可読性が低かった。Go触れる人みんなC触れるわけでないから
  • コンパイラC言語からGoになった
  • Go1.6HTTP2対応
  • 1.7SSA対応
  • 1.8,1.9はそんなにない
  • Go1.10でGo BuildCache

    2016

  • Go1.11でGo module

2017

2018

  • Go 1.13で Moduleproxu module mirror