1 of 23

Goならわかるシステムプログラミング

改訂のお知らせ

2019/02/15 Go 1.12 Release Party

フューチャー(株) 渋川よしき

2 of 23

お前誰よ

渋川よしき� 本田技術研究所:〜2010年12月� DeNA:〜2017年8月� フューチャー(株):2017年9月〜� 三女の父��著書� つまみぐい勉強法(共著)、� Real World HTTP、Mithril、� Goならわかるシステムプログラミング��翻訳� エキスパートPythonプログラミング、� ソフトウェア開発スクラム、� ポモドーロテクニック入門、� アート・オブ・コミュニティetc�

好きな言語� JavaScript®️ / Go / Python��プログラミング以外� インラインスケート@光が丘公園��アカウント� github.com/shibukawa� twitter.com/shibu_jp�

2

3 of 23

4 of 23

有名企業のお客様のシステムを多数手がけています

  • ABCマート様の販売スタッフ向けスマフォアプリ「s NAVI」を全店リリース
  • アルペン様の次世代物流IT基盤を構築
  • 読売巨人軍様のファンサービス戦略を実現する会員管理システムを構築
  • 毎日新聞様の紙・デジタルを連動させる新基幹システム
  • 不二家洋菓子店様のタブレットを使った新POSシステム
  • 広島銀行様のITコストの適正化
  • トマト銀行様の渉外融資システムのAWS移行
  • 佐川急便様の配送伝票入力業務の自動化に向けたAIシステム開発
  • 千葉銀行様の新営業・融資システムの開発開始
  • あとは東京カレンダーとか、コードキャンプ、TrexEdgeが関連会社です

弊社プレスリリースサイトから抜粋

https://www.future.co.jp/press_room/

5 of 23

フューチャーをざっくり言うと

  • 二人のエンジニアが創ったITコンサル会社
  • コンサルからSIまで全部やる
  • 中立(ニュートラル)のポジション
  • 「ないものはつくる」の精神

2016年4月1日に持株会社体制に移行

CONFIDENTIAL

Copyright ©2017 by Future Architect, Inc. Japan

5

6 of 23

フューチャーで有名なのは

  • 脆弱性検知ツールのVuls
  • Software Designでも最近何度か特集されています。

https://github.com/future-architect/vuls

6

7 of 23

Cheetah Grid

  • Google Spreadsheetと同じく、Canvas描画で高速な表描画の�JSライブラリ
  • 100万行でも100ミリ秒�(デモページ見てね)
  • Vue.js用のコンポーネントもあります。
  • MithrilとReactはないのでこれから作ってみようかと。

https://github.com/future-architect/cheetah-grid

7

8 of 23

その他のお知らせ

第2特集

Webに携わるエンジニアの必須科目

ベーシックなJavaScriptをちゃんと身につけよう

  • 第1章:JavaScriptの用途・仕様の変遷…… うひょ
  • 第2章:JavaScriptの特徴を理解してスムーズに習得しよう…… うひょ
  • 第3章:ES2015~2018を踏まえた,今どきのJavaScriptの書き方� …… 渋川 よしき

ちなみに、第一特集も弊社メンバーが関わっています!

8

9 of 23

Goならわかるシステムプログラミング

改訂のお知らせ

2019/02/15 Go 1.12 Release Party

フューチャー(株) 渋川よしき

10 of 23

Goならわかるシステムプログラミング

  • おかげさまで2回目の増刷がかかりました
    • PDF版の販売も開始されました
  • Goならわかるシステムプログラミングの経緯
    • 2016年9月〜2017年6月まで隔週、全20回分のウェブのコンテンツとして作成
    • 章構成を少し修正したり、新しい章を追加したり、2017年10月に書籍として出版。
    • その後も、githubの原稿のリポジトリのissueに追加したいことをメモし続けていた
    • 2018年10月ごろから、そろそろ在庫がきれそうという話があり、加筆を開始
    • Goで書かれたOS、Biscuitについて調査を始めるものの、分量が多すぎてしまって(ブートストラップだけで1章分)改訂ネタとしてはボツに
      • 2018年11月のGo Conference 2018 Autumnで供養
      • これはまたどこかで日本語で出し直そうと思います
    • issueに追加していた内容および、Biscuitで調べてわかったこと少々を反映して10ページほど増量して2019年2月に3刷として出版

11 of 23

Go年表

バージョン

リリース日

更新内容の概要

go1.2

2013/12/01

年2回リリースの採用

go1.3

2014/06/18

GC停止時間が1/2〜1/3に

go1.4

2014/12/10

go generate

go1.5

2015/08/19

セルフホスト化達成、internalパッケージ、GC 10mS以下、shared、iOS

go1.6

2016/02/17

vendoring正式サポート、GCさらに早く、Android、HTTP2

go1.7

2016/08/15

SSAで5-35%高速化、context

go1.8

2017/02/16

go dep、plugin、HTTP Server Push

go1.9

2017/08/25

並列コンパイル

go1.10

2018/02/16

小幅アップデート

go1.11

2018/08/25

WebAssembly, modules追加

go1.12

2019/02/?

TLS 1.3、darwinでlibSystem経由でsyscall、関数追加etc

12 of 23

Go年表

バージョン

リリース日

更新内容の概要

go1.2

2013/12/01

年2回リリースの採用

go1.3

2014/06/18

GC停止時間が1/2〜1/3に

go1.4

2014/12/10

go generate

go1.5

2015/08/19

セルフホスト化達成、internalパッケージ、GC 10mS以下、shared、iOS

go1.6

2016/02/17

vendoring正式サポート、GCさらに早く、Android、HTTP2

go1.7

2016/08/15

SSAで5-35%高速化、context

go1.8

2017/02/16

go dep、plugin、HTTP Server Push

go1.9

2017/08/25

並列コンパイル

go1.10

2018/02/16

小幅アップデート

go1.11

2018/08/25

WebAssembly, modules追加

go1.12

2019/02/?

TLS 1.3、darwinでlibSystem経由でsyscall、関数追加etc

ASCII.jp

連載期間

13 of 23

Go年表

バージョン

リリース日

更新内容の概要

go1.2

2013/12/01

年2回リリースの採用

go1.3

2014/06/18

GC停止時間が1/2〜1/3に

go1.4

2014/12/10

go generate

go1.5

2015/08/19

セルフホスト化達成、internalパッケージ、GC 10mS以下、shared、iOS

go1.6

2016/02/17

vendoring正式サポート、GCさらに早く、Android、HTTP2

go1.7

2016/08/15

SSAで5-35%高速化、context

go1.8

2017/02/16

go dep、plugin、HTTP Server Push

go1.9

2017/08/25

並列コンパイル

go1.10

2018/02/16

小幅アップデート

go1.11

2018/08/25

WebAssembly, modules追加

go1.12

2019/02/?

TLS 1.3、darwinでlibSystem経由でsyscall、関数追加etc

書籍化

準備期間

14 of 23

Go年表

バージョン

リリース日

更新内容の概要

go1.2

2013/12/01

年2回リリースの採用

go1.3

2014/06/18

GC停止時間が1/2〜1/3に

go1.4

2014/12/10

go generate

go1.5

2015/08/19

セルフホスト化達成、internalパッケージ、GC 10mS以下、shared、iOS

go1.6

2016/02/17

vendoring正式サポート、GCさらに早く、Android、HTTP2

go1.7

2016/08/15

SSAで5-35%高速化、context

go1.8

2017/02/16

go dep、plugin、HTTP Server Push

go1.9

2017/08/25

並列コンパイル

go1.10

2018/02/16

小幅アップデート

go1.11

2018/08/25

WebAssembly, modules追加

go1.12

2019/02/?

TLS 1.3、darwinでlibSystem経由でsyscall、関数追加etc

改訂

準備期間

15 of 23

Go 1.7からGo 1.12までの更新

  • この間、Goの中身はかなり更新され、コンパイラも改善され、小さく速いバイナリが早く生成できるようになった
    • セルフホストからのSSA導入 (1.7)
    • 並列コンパイル (1.9)
  • ビルドの対象が増える
    • プラグイン (1.8)
    • WebAssembly (1.11)
  • パッケージ管理は試行錯誤の流れ
    • vendor (1.5) → dep (1.8) → modules (1.11)
  • 相変わらず謎の速度アップを遂げるGC
    • ミリ秒からマイクロ秒のオーダーへ (1.8)

16 of 23

実は・・・

  • 書籍への影響はそれほど多くはなかった
    • Go自体、アップデートがどんどん細かくなってきてそれほど大きな変更が入っていない
      • Go 1.Xの互換性維持の方針
    • コンパイラ、リンカなどの処理系は説明で触れていなかった
      • 本当はこれもやりたいが・・・
    • 本の説明では主にランタイムばかり
      • GCの変更については、もともとさらっとしか説明していなかった
      • ライブラリも細かい修正対応が多い
  • Goのアップデートとは関係ないアップデートもたくさん入れた
    • 既存のライブラリの使い方の強化とか、サードパーティライブラリの紹介を増やしたり、一般的なOSの話題を増やしたり

17 of 23

https://docs.google.com/presentation/d/1EwuJhEHR5Trr2aXBPQajZ2Hcoh29tm_LQCpgfrCnuRk/edit#slide=id.g33148270ac_0_143

18 of 23

19 of 23

本の改訂

  • Goのバージョンアップに起因すること
    • GCが超早くなったよ!→説明中の数値を更新
    • fmt.Printlnの内部実装の変更の追従
      • ふつうはprivateなところに依存しちゃいけません
    • Go 1.8でos.Executable()が追加。実行中のプログラムの絶対パスを返す。
    • Go 1.9のLinuxでos.Execが高速化。fork/execから、clone()のCLONE_VM/CLONE_VFORKオプションに変更
    • Go 1.10のstrings.Builderの追加
    • Go 1.12でmacOSがシステムコールを直接呼ばなくなる
    • Go 1.12でWindows 10でストリーム型のUnixドメインソケットが使えるように
    • Go 1.12で積極的にメモリをOSに返すようになります
    • Go 1.12でos.ProcessState.ExitCode()メソッドが追加になり終了コードが取れるように!
    • Go 1.12でos.UserHomeDir()が追加になった

20 of 23

本の改訂

  • Goのバージョンアップに起因すること
    • GCが超早くなったよ!→説明中の数値を更新
    • fmt.Printlnの内部実装の変更の追従
      • ふつうはprivateなところに依存しちゃいけません
    • Go 1.8でos.Executable()が追加。実行中のプログラムの絶対パスを返す。
    • Go 1.9のLinuxでos.Execが高速化。fork/execから、clone()のCLONE_VM/CLONE_VFORKオプションに変更
    • Go 1.10のstrings.Builderの追加
    • Go 1.12でmacOSがシステムコールを直接呼ばなくなる
    • Go 1.12でWindows 10でストリーム型のUnixドメインソケットが使えるように
    • Go 1.12で積極的にメモリをOSに返すようになります
    • Go 1.12でos.ProcessState.ExitCode()メソッドが追加になり終了コードが取れるように!
    • Go 1.12でos.UserHomeDir()が追加になった

Go 1.12に言及した�商業出版としては�世界初?

21 of 23

本の改訂

  • Goのバージョンアップに起因しないこと
    • bytes.BufferでRead()を読むとバッファの内容が消費されちゃうから、String()メソッドで得られる情報からは消えちゃうよ
    • goroutineとスレッドの違いを追記(ファイバー的に使える、優先度はないよ)
    • ファイルを扱うAPI設計のTips (ファイル名?io.Reader/io.Writer?[]byte?)�
  • サードパーティのツールとかライブラリとかの更新対応
    • GogLandがGoLandに名前が変わりましたよ
    • delveのデバッガーのインストール方法とか初回起動時の挙動が変わったよ
    • Gosirisというアクターのライブラリを紹介の追加
    • evioという高速なイベントループライブラリの紹介の追加
    • UDPでブロードキャストして仲間を見つけるライブラリの紹介の追加

22 of 23

本の改訂

  • Goに限らない一般的な話題
    • TCPとUDPの使い分けとか、HTTP/3とか
    • DPDK: デバイスアクセスをユーザーランドでがんばるやつもいる
    • ファイルシステムの説明の中で、論理ボリュームマネージャの説明を追加
    • 仮想化で、AWSの仮想化ランタイムが変わったよ話を追加
    • メモリ圧縮はmacOS以外にWindowsもやるようになったよ
    • 環境変数のスコープ(子プロセスには伝わるけどそれ以外には伝わらない)
    • 作業フォルダは1プロセスにつき1つしか持てない。スレッド間で共有
    • Rubyだけじゃなくて、PythonもCopy on Writeの恩恵を受けられるように変更されました
    • 実行ファイルフォーマット、メモリレイアウト、アドレス空間のランダム化を追加
    • 実行ファイルにアセットをバンドルするお話
    • ファイルシステムのビットの意味

23 of 23

今後も、改訂し続けていくと思いますのでぜひ!

  • 次に向けて、ネタ帳にはすでに何件か入っています。
  • 在庫がなくならないと改訂できませんので、ぜひいっぱい買ってください
  • 新卒の人とかに配ると、やる気のある人はガンガン成長してくれるはず
    • MacBook Proを買うお金で100冊は買えるので安い投資!安すぎる!