『Go ならわかるシステムプログラミング』を眺める
Go 言語の言語仕様について勉強するなら真っ先に『プログラミング言語 Go』を推すが,もう少し実装よりの話であれば『Go ならわかるシステムプログラミング』を推す。 特に Go 言語でシステム寄りのプログラミングを行うのであれば,是非とも目を通しておくべきだろう。
この本は ASCII.jp で連載されていた「Goならわかるシステムプログラミング」を書籍用に再構成したものらしい。 なので,まずは Web サイトの方を見て紙の本で買うべきか判断するのがいいと思う。
Go 言語の特徴のひとつがクロス・コンパイルの容易さである。
いくつか制約はあるが,基本的には同じコードで Windows も UNIX 系プラットフォームも対応していて,これを実現するために標準の syscall
や runtime
パッケージ周辺を巧妙にカプセル化している。
しかもこれらのソースコードが公開されているため1 システム・プログラミングの学習教材としても使える2。
特に『Go ならわかるシステムプログラミング』では,ファイルやソケットなどに代表される順次アクセスの汎化である io
.Reader
/ io
.Writer
およびその派生・特化クラス,またプロセスやスレッドに関する解説が秀逸だと思う。
さらに Docker コアの libcontainer についても解説があったりする(自前で libcontainer を直に触る人はあまりいないかも知れないが)。
個人的によく出来てると思うのが平行(concurrent)/並列(parallel)処理について解説している13章と14章だ。 プロセスやスレッド(更にはガベージコレクション)と goroutine の関係について日本語で分かりやすく解説している本は少ないと思うので,これだけで『Go ならわかるシステムプログラミング』を買っておく価値があると思う3。
goroutine と channel の組み合わせは並行処理におけるパラダイムシフトとなる可能性がある。 それくらい高いポテンシャルを持っているのだ。 そのための基礎学習を『Go ならわかるシステムプログラミング』でやっておくのがいいんじゃないかな。
ブックマーク
参考図書
- Goならわかるシステムプログラミング
- 渋川 よしき (著), ごっちん (イラスト)
- ラムダノート 2017-10-23
- 単行本(ソフトカバー)
- 4908686033 (ASIN), 9784908686030 (EAN), 4908686033 (ISBN)
- 評価
PDF 版あり。ファイルやソケットなどに代表される順次アクセスの汎化である io.Reader / io.Writer およびその派生・特化クラス,またプロセスやスレッドに関する解説が秀逸だと思う。さらに Docker コアの libcontainer についても解説がある。
- プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
- 丸善出版 2016-06-20
- 単行本(ソフトカバー)
- 4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
- 評価
著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。
-
ちなみに『Go ならわかるシステムプログラミング』では,各章の最後に演習問題がある。 ↩︎
-
ただし並行処理のデザインパターン等,もう少し踏み込んだ内容については『Go 言語による並行処理』のほうがいいかも知れない。 ↩︎