Server Build Exercises on AWS (Amazon Web Services) 2022 edition

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言語

リファレンス

おまけコラム

べつに Python 好きなわけでもないしね。

ヨーロッパ原産(かつ Apple Macintosh の上で開発とか)で、 文化的に、 UnixおよびC言語文化圏と遠すぎて、 いろいろ辛い。 ABC言語に由来する「インデント=ブロック」って教科書を読むと理屈は納得するけど、 実際には書きづらい(auto indent が効かない)よ… (試行錯誤とかしなくて、頭の中で全部一度くみたてて一気に書くのかねぇ、Python好きな人は)

だいたい1980年代後半の言語が40年ちかい時を経て何を今さら流行るんだかなぁ…

ちなみに、日本で1990年代に Python 流行しなかったのは、 たぶんオライリーの Python 本の出来が悪かったからだと思っています。 その本を持ってるけど、あれはダメだったなぁ。 ずいぶんあとになって同じ作者が、 やっぱりオライリーで Python の入門書を書いてるけど、だいぶよくなってた。

雑多な記事

Last updated on 12 Dec 2021
Published on 12 Dec 2021
Copyright (C) 2021-2022 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0
We appreciate AWS Academy Japan for the offer of the learning environment.

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.