2013-10-26

C++11参考書の公開:C++11の文法と機能

C++11の参考書をGitHubで公開する。

GitHub: EzoeRyou/cpp-book

GitHubからzipでダウンロード

GitHub Pagesでの閲覧:C++11の文法と機能

本書はC++11のコア言語の文法と機能を、標準規格書に従って解説したものである。正式なC++規格書として発行された後の、ひとつ後のドラフト規格、N3337 を参考にしている。ドラフト規格を参考にした理由は、正式なC++規格書は、個人での入手が煩わしいためである。読者に入手が困難な資料を元に記述された参考書は価値がない。そのため、読者が容易に入手できるドラフト規格のうち、正式なC++規格書とほとんどかわらないN3337を参考にした。

本書の対象読者は、C++を記述するものである。C++実装者ではない。そのため、サンプルコードを増やし、冗長な解説を増やし、C++コンパイラーを実装するための詳細な定義は省いた。そもそも本書はC++規格の翻訳ではなく、C++規格の検証に使うことはできない。

本書の執筆は、まだC++11がC++0xと呼ばれていた2010年から始まっている。そのため、当時のドラフト規格を参考に書かれた部分もあり、正式なC++11規格とは異なっている可能性がある。また、正式に発行されたC++11規格には不具合も多数見つかっているため、C++14では異なっている部分もある。また、ドラフトの時点であまりにも変更が激しい箇所は飛ばしたので、漏れもある。

このような未完成品を公開するのは忍びないが、且は執筆資金枯渇のため、且は執筆環境消失のため、今公開することにした。

本書はC++11を解説する目的で書き始めたが、C++11の正式規格には様々な不具合が見つかり、誤りを正すために、マイナーアップデートなるC++14の制定が2014年に予定されている。また、その次の2017年には、メジャーアップデートとなるC++17が控えている。C++14はアップデートとはいえ、文面的にかなり大きな変更を含むため、もともとC++0xドラフトによって書かれ、C++11規格を参考にした本書の小手先の修正では対応できない。

本書の執筆は2010年から始まっているが、C++14が真剣に議論されだした2012年から、執筆が滞りがちになった。

筆者は常に最新のC++ドラフトを参照しているが、本書はC++11の参考書であるし、また、まだ不安定なドラフト規格の文面を参考にすることはできない。結果として、本書の執筆には、普段参照している最新のC++ドラフトからは、はるかに遅れたC++11規格を参照しなければならず、執筆の妨げとなった。

また、本書を記述するHTML/CSS/JavaScriptも、何年も前の未熟な理解により、甚だ稚拙であり、編集の妨げとなった。

この問題を解決するには、フルスクラッチからの書き直しが必要になるが、それはすでに費やした労力を捨て去ることになり、やはり意味がない。

あるいはこれ、伽藍とバザールの典型例かもしれず、早期に公開していれば、今とは違った結果になったかもしれない。

筆者は、プログラミングの参考書は、自由であるべきだと信じており、この参考書は、自由を保証するコピーレフトなライセンスで公開する。

2013年10月26日
江添亮

というわけで、執筆資金が尽きたし、また、今住んでいる家も引き払うことになり、引越し作業でしばらく執筆環境がなくなるので、この機会に、C++11の参考書を公開しておく。未完成ではあるが、Basic Concepts以外はほとんど解説している。

どうやって公開するかについては、少し迷った。Gumroadのようなものを使って有償ダウンロードさせるという手もあった。しかし、私は、プログラミングの参考書は自由でなければならないと信ずる。自由の定義には、自由に再配布する自由が含まれるのは当然である。つまり、GFDLで公開するのが最も理にかなっている。とすれば、有償ダウンロードは、手間でしかない。

そして、今クールなキッズが皆使うというGitHubなるものがある以上、そこにアップロードされるのも当然である。とすれば、その最初の名誉ぐらいは、自分が受けたいものだ。伽藍とバザールを考えれば、もっと早く公開すべきだったのかもしれない。

結局、今の日本には、オンライン上で手軽に送金する方法が欠けている。これがもし、読者の手元に貯金箱があって、そこに現金を投下すると送金できるような仕組みならば、もっと自由なソフトウェアや書籍への対価の支払いが活発になっているはずなのだが。

いずれにせよ、個人の少額の対価が得られたところで焼け石に水でしかないし、たとえ売るとしても、参考書は自由でなければならないのはもちろんだ。私は不自由なプログラミングの参考書などできるだけ読みたくない。私が読みたくないものを公開することなどできない。

残念ながら、日本国内には、C++のスポンサーがいない。C++を教育する需要がないのか。C++の規格を理解している人間の需要はないのか。

さて、後は引越し作業に専念しなければならない。しばらくはネットともコンピューターとも離れた生活になる。

14 comments:

Anonymous said...

ありがとうございます!できればこのブログと同様にライセンスのオプションにany later versionもつけてほしいですがむりですかね

江添亮 said...

あれ、ついてませんでしたっけ?

江添亮 said...

ついてますね。

Anonymous said...

oh...一番下を見落としてました

y121516 said...

執筆おつかれさまでした。
多大の敬意を。

Anonymous said...

公開おめでとうございます。
C++をなんとなく使っていて、ましてや規格書など読んだこともない自分にはかなり参考になります。

さしでがましいですが、githubで公開されているので
継続的な小額寄付のflattrやgittipなどの利用も検討してはどうでしょうか。
焼け石に水といっても何かの足しになるかもしれないので。

tiger said...

ちょっ、Donation 辞めたん?
http://cpplover.blogspot.jp/2010/03/blog-post_09.html
公開物あるんやったら、購入を口実に、ちゃんと払えるねん。

Anonymous said...

おお、ついに公開に。
しかもCopyLeft。

お疲れ様でした!

Anonymous said...

公開、おめでとうございます!

Anonymous said...

江添さんなら参考書を自由なものにしてくれると信じていました。
公開おめでとうございます。

Anonymous said...

江添さんの盗作疑惑が増田で話題になってますよ。
http://anond.hatelabo.jp/20131028095708

Anonymous said...

公開or出版されたら寄付しようと考えていたのですが。。。

Anonymous said...

いろいろと言い訳しているが、
能力不足で途中で投げ出した訳だな(笑)

Anonymous said...

資源を能力に含むならそういうことになるでyしょうね。