Go言語
Go言語とRustが21世紀版C言語として知られています。
最近のインフラシステムではGo言語をよく見ます。 例: docker, kubernetes, … インフラだけでなく全分野に普及中という説もありますな…
Rustは、 もともと Firefox を Rust で書き直す計画で知られていましたが、 最近は新規開発するカーネルの部品はRustで書くべきでは?という意見が出始めましたね。 まだ今後どうなるか?はわかりませんが…
ちなみにGoの学習コストは低く(C言語程度はわかる)初心者にも手が出しやすい、 一方、Rustは(とくに初期段階での)学習コストが高いと言われています。 そのせいか書ける人がすごく少ないので、 (O’reilly調べによると) Rust屋のギャラが一番よいです、なう。 なお二番がGo言語だそうです、なんだかんだ言っても、そんなにGo書ける人がいない?
Go言語とは?
Go言語は、 主要デザイナ3人(Robert Griesemer, Rob Pike and Ken Thompson)のうち2人(R.Pike と K. Thomposon)が Unix を開発したベル研のメンバーなので、 Unixらしさがよく出ています。 簡潔で小さなものを組み合わせて何とかするという Unix 的な設計センスがよい感じなのです。 そもも Ken Thompson が Unix 開発メンバーどころか Unix 原作者ですけど:-) C 言語も Ken Thompson が発端だと思いますけど、Thompson は言語屋というよりはシステム屋さんなので、 今の形に整えたのは言語屋さんの故 Dennis Ritchie なのでしょう
過去50年くらいの各種プログラミング言語の反省も生きています。 C 言語がベースですが、 いろいろな言語のよいところわるいところをみて、 取捨選択されている感じです。
- 必要なものを一式含んだバイナリを生成(shared library を否定)
- コマンドラインだけで十分完結する開発システムを提供、 IDEは不要(IDEを使いたい人は使えばよい;たぶんIDEも下請けにgoコマンドを呼んでるだけ)
- 公式が定めたスタイルあり。go fmt コマンドで機械的に整形処理を推奨。 インデントは何文字?それともTAB?といった宗教戦争を回避
- C言語のダメなところは反省した e.g.
- { }省略禁止(有名な「ぶらさがりelse問題」をなくす)
- switch文の挙動を逆にした(さらに大幅拡張して便利〜)
- まぁ21世紀の言語なので、オブジェクト指向っぽく書けますけど、熱心にオブジェクト指向をやらないところがGoOD !!! (だいたい20世紀末の時点で、 OOP教わけわからないほど肥大化してるけど、 カプセル化、コンポジッション、ポリモーフィズムくらいしか使わ(え)ないじゃん!? って意見はすでにあった。 そのくらいのミニマムな仕様だけ取り込んでいて大変ラブリ〜です)
- UTF-8前提
- 省略できるものは省略可になった( ; とか)
- Go言語のこの仕様は何が出典なんだろう?とか楽しいよね:-)
- C++きらい(Oh! Yes!)
ちなみに、 UTF-8とは、 Ken Thompson と Rob Pike が、 ある晩、どっかのレストランで盛り上がって、 えいやっと考えたエンコーディング方式です。 そういうわけでGo言語がUTF-8前提なのは、 あたり前田のクラッカーなのですね。 UTF-8 は先頭のNビットみれば3つの条件にすぐ分岐できて、パーサ書くのは他の謎エンコーディングにくらべて簡単そう(本当かな?)。 そういう設計センスも、この人たちだから納得だよねね〜といういい感じです
コンテナとGo言語
コンテナで動かすなら、 起動後に変な依存性解決で悩むような言語ではなく、 はじめから一つの実行ファイル(one binary)を作成するGo言語を使うべきと思わないか? 思うよね
だいたいコンテナを盛大に使いたいGoogleが開発主体なんだから、 そういう環境に向いているに決まっているじゃなイカ!
あと21世紀というか2010年代以降に登場するインフラシステムはGo言語が多いぞ。 たぶん docker が登場して、dockerはGo言語で書いてあるのか!と、一気に注目度が上がったと思うんですよね〜 もちろん Google の kubernetes も Go言語
リファレンス
- Go言語 (本家)
- golang.orgからgo.devに変更したみたい (go.orgが取れなかったのでgolang.orgらしいので、go.devが取れたから変更したかな?)
- プログラミング言語 Go Tour 日本語版
- ブラウザ上でコードを書いて実行できます
- 日本におけるGo言語コミュニティの現況
- Go Web プログラミング (だれか(ちゃいな?)が書いた Go で書く Web アプリ本)
おまけコラム
べつに Python 好きなわけでもないしね。
ヨーロッパ原産(かつ Apple Macintosh の上で開発とか)で、 文化的に、 UnixおよびC言語文化圏と遠すぎて、 いろいろ辛い。 ABC言語に由来する「インデント=ブロック」って教科書を読むと理屈は納得するけど、 実際には書きづらい(auto indent が効かない)よ… (試行錯誤とかしなくて、頭の中で全部一度くみたてて一気に書くのかねぇ、Python好きな人は)
だいたい1980年代後半の言語が40年ちかい時を経て何を今さら流行るんだかなぁ…
ちなみに、日本で1990年代に Python 流行しなかったのは、 たぶんオライリーの Python 本の出来が悪かったからだと思っています。 その本を持ってるけど、あれはダメだったなぁ。 ずいぶんあとになって同じ作者が、 やっぱりオライリーで Python の入門書を書いてるけど、だいぶよくなってた。