2019-09-22

江添ボドゲ会@9月29日

自宅ボドゲ会を下記の要領で開催します。

江添ボドゲ会@9月29日 - connpass

2019-09-20

江添亮のC++入門の出版記念の勉強会告知

江添亮のC++入門の出版を記念した勉強会を開催します。参加登録は以下から。

https://kbkz.connpass.com/event/148247/

勉強会の内容としては、江添亮のC++入門の執筆について軽く話した後、その場で書籍の販売をしつつ、交流会をする。特に発表者はつのらない。というのも勉強会の価値は交流にあると考えているためだ。

2019-09-19

MSVCのSTLがGitHubで公開

https://github.com/microsoft/STL

MSVCのSTLがGitHubで公開された。ライセンスはLLVM例外条項付きのApache 2.0。更に興味深いことに、今後のSTLの開発はGitHubに移行する予定だそうだ。マイクロソフトも変わったものだ。

C++のテンプレートの都合上、STLのソースコードはMSVCに付属していて、読むことは誰にでもできた。理論的には、MSのEULAに縛られない読み方もできたはずだ。例えばEULAに同意せずにMSVCを入手し、インストラーを実行せずに手動でアーカイブを展開すればソースコードを読むことはできたはずだ。もちろん、わざわざそんな手間をかけてまで不自由ソフトウェアのソースコードを読みたいとは思わないし、民事上のリスクも背負いたくない。

そのため、私がC++を教育するときは、MSVCの存在は単に無視していた。libstdc++とlibc++は自由ソフトウェアであるので、その実装も含めて教育することができるが、MSVCは不自由なので、リスク回避のためにソースコードを読むこともできずにいた。MSVCを無視するなという声に対しては、不自由ソフトウェアに時間を浪費したくはないし、仮に私が教えたいにしても 、マイクロソフトは教えたがらないようだという都合のいい言い訳が成り立っていた。しかし、今後はそういう言い訳は通用しないようだ。

江添亮のC++入門が出版された

江添亮のC++入門が出版された。もうすでに一部書店では店頭に並べているところもあるようだ。

この本はタイトル通り入門書だ。C++のソースコードのコンパイル方法から初めて、GNU Makeによるビルドシステムを少し触り、基本的な文法を解説し、一部のライブラリの仕組みまで解説する。

この本の執筆にあたっては、知識のブートストラップを意識した。私は一から物を教えるという性質の本で、まだその本では説明をしていない知識を何の説明もなしにいきなり出す本を読んだことがある。巷では絶賛されている本ではあるが、著者自らもうその本で教育をしないと宣言した本だ。そのため、すでに説明した知識のみを使って次の知識を説明するようにした。

ただ、これは思いの外大変だった。入門書を書いている間、なぜ変えたいの知れないよくわからないもどかしさに包まれながら解説を書いていた。そしてとうとうポインターを解説した後、あらゆることの説明がとても簡単になっていることに気がついた。なぜならポインターの知識を前提にしてよいからだ。つまり、ポインターが知識の依存関係の割と根本的なところに存在するらしい。なぜポインターの解説がこんなに送れたかというと、現代のC++は生のポインターを直接使わずして実用的なコードが書けるからだ。

今回の本の表紙には私の写真が印刷されている。これは今まで2冊の本を出した際に、なぜ著者の写真がないのだ、ぜひ載せるべきだと言われていたので、3冊めとなる今回は、では載せてみようということで実現した。いまのところ、Twitter上での言及が今までの2冊に比べて多いようで、宣伝効果はあるようだl.写真の撮影は古くからの友人でプロのカメラマンの三浦大に依頼した。

Photographer - Masaru Miura

私の本のライセンスはGPLv3だが、写真はライセンスされない。写真の著作権は撮影者のもので、撮影者がGPLv3に同意しなかったためだ。撮影者は芸術家気質なので自分の作品を改変されたくないという気持ちは理解できる。

EzoeRyou/cpp-intro: Beginner's guide for C++

この入門書を読み終えたならば、少し古いが「C++11/14コア言語」や、未だに大多数の現場では使われていない最新の「江添亮の詳説C++17」も読むとよい。紙書籍、電子書籍で出版されている他、GitHubで公開されている。

EzoeRyou/cpp-book: C++11 textbook
EzoeRyou/cpp17book: textbook for C++17

数年後も同じ仕事を続けているのであれば、おそらく「江添亮のC++20」のようなタイトルの本が出るだろう。

近いうちに前の本でもやったように、本の出版記念の勉強会でも開きたいところだ。

2019-09-17

CADDi C++勉強会5回目

CADDi C++勉強会の5回目が9月25日に開催されます。

C++勉強会 #5 - connpass

今回はオーバーロード解決とテンプレートの実引数推定について解説する。

2019-09-11

CADDi C++勉強会、11日に延期

CADDiのC++勉強会が、台風の影響による電車の劣悪な運行状況から、11日に延期された。

https://caddi.connpass.com/event/146851/

当日はみんなの疑問に答える形で規格上の用語を解説していく。

2019-09-03

CADDi C++勉強会4回目

C++勉強会 #3 - connpass

今回は式と文の違いといった、C++の用語の解説をする。

今回の勉強会の動機は、CADDi社員がうっかり未評価式の文脈でラムダ式を使ってしまったところ、つまり

using type = decltype([]{}) ;

のようなコードを-std=c++17でコンパイルしたところ、「未評価の文脈でラムダ式は使えない」というそのままのコンパイルエラーメッセージが出力されたが、はて、未評価とは?という疑問でこのエラーメッセージの意味するところを理解するのに相当苦労した経験をしたことが元となっている。なぜC++コンパイラーがこのようなエラーメッセージを出すかというと、未評価という言葉は規格上の用語なのだ。ちなみに、Clangのほうがエラーメッセージは親切で、「未評価オペランドの中のラムダ式」としている。これは規格そのままの表現だ。GCCの表現は規格どおりの表現ではないが、規格に沿った表現であることに変わりはない。C++コンパイラー開発者は当然C++規格を参照しているのでC++規格に沿った表現を使う。そのために、コンパイラーのエラーメッセージを解釈するには、規格の用語の知識が必要になる。今回はそのような知っていると役に立つかも知れない規格の用語を解説していこうと思う。