『プログラミングの魔導書 〜Programmers' Grimoire〜』がすごいのです

すでに多くの方がご存知のことと思いますが、株式会社ロングゲートからまもなく『プログラミングの魔導書 〜Programmers' Grimoire〜』が発刊されます。

発売前レビューをするということで、id:faith_and_brave さんより PDF を頂戴していたのですが、まったく自分の役割を自覚していなかった (内容のチェック的なものかと思ってました) ので、予約締切間近 (8/6、つまり明日までです!) ですが、ちょっと紹介させてもらいますね。

Bjarne Stroustrupへのインタビュー

デンマーク生まれの長男で髪の毛が年々少なくなっているというビャーネ・ストロストォプさんへのインタビューです。インタビュワーは、丸刈りで丸刈りでC++が好きで「本の虫」というブログを執筆されている、江添さんです。

C++0xの現況をざっくり把握するのに、どこを見るのが一番なんだろうか、と悩んでしまいますが、インタビューの書き起こしというのはとてもいいですね。これを読むだけでも価値があると思いました。

C++0x以降の進化について」というトピックで、ストロストォプさんは「multimethods」*1 を推しているのですが、これが個人的には興味深いところでした。

ダイナミックディスパッチをRTTIに基づいて行うのに、仮想関数を用いるのは、クラスの設計の柔軟性を妨げます。特に、値だけを保持するようなポリモーフィックなクラスに、ディスパッチのためだけに仮想関数を追加していくやり方は、ドメインロジックの記述を分散化させ、設計を困難にします。 (と、仕事をしていて思った。)

さらにストロストォプさんが指摘するように、確かにこの問題はVisitorパタンを使えば部分的に解決できますが、それでも、Visitorをacceptするためのメソッドを操作対象となるクラスにいちいち付加しないといけない、という問題がありますし、この状況で出現するVisitorというのは、ドメインロジックの構成要素ではないので、設計上の邪魔になります。

multimethodsを使うことで、ますますC++のコードが素人目にメンテ不可能になりそうな気もしないではありませんが、個人的には今すぐにでも欲しい機能です。

ところで、『ムーブ』についても触れていますね。「C++で書くと遅い!」というCプログラマの詭弁に最後まで抗えなかったのが、Cでは当たり前のムーブセマンティクスなのですが、これもムーブ演算子、ムーブコンストラクタの導入により、素直に、less error-proneな形で実現できるというのが気に入っています。

Boost.Serialization の紹介

オブジェクトを手軽に永続化するのに便利な Boost.Serialization の紹介です。残念ながら、私はちょっとしか使ったことがないのですが、記事もコンパクトにまとまっているように、予想以上に手軽に使えることは間違いないです。

Variadic Templates - お前を待っていた

メタプログラミングについて理解がないと、可変長テンプレートのありがたみというのは湧いてこない気もしていたのですが、この記事では、Win32 APIに基づいた実践的な例を出して解説しています。

Chronoライブラリで考える型システム

C++ では、型システムと、それを取り巻く操作を扱うのに、traits という概念が出てきますが、これって「圏」のイメージにつながるなあ、と思いました。

オーブンレンジクッキング

id:mb2sync さんの C++ ライブラリ集である P-Stade の一様を担う Oven についての詳細な解説記事。Range だから Oven。Oven とても仕事で使いたんですけど、Boost 標準的でないという理由でだめなんですよね…。RangeEx には期待したんですが、Oven のこなれた感には全く及んでおらず落胆しました。俺プロジェクトでは、バンバン使っていきたいです。

C++ を実践的に扱えるようになるのに、とても大事な概念だと思います。Range。Java でも Collections Framework が扱えて一人前みたいのがあったと思いますが、それに匹敵しますね。なので、これを機に Range に触れてみるというのはいい話だと思いますよ。

Hello, C++ World!

C++で『Hello, World』が実現されるまでの、男たちのドラマについて、稲葉さんが淡々と語ります。

C++ほどライブラリの作り手の心をくすぐる言語って他にないと思うんですよね。使い手には楽をさせてやろう、驚かせてやろう、という一心が、様々な技工と、数多くの非常に完成度の高いライブラリを生んできたのだと勝手に思っているわけですが、そんな一端が、ただの『Hello, World』に垣間見れた、という気がいたしました。

Crawling in the Stream

上のような感想を抱く理由は、まあ、iostream の設計を見るとよく分かるワケで、そうですね、やりすぎないようにするのが大事なのかな、と思います。

メタプログラミングノキワミ アッー!

sizeof() の使いどころ、Boost.Preprocessor の使いどころ、という感じでしょうか。メタプログラミングに馴染みのない方にとっては、ずっと頭の体操になってしまうかもしれないので、もうちょっと入門的な記事があってもいいのかな、と思ってしまいました。

Boost.AsioによるHTTP通信入門

ネットワークライブラリ、C界隈だと、libevent とか libev とか picoev とかいろいろあるわけですが、C++ ではどうなの、というわけで、Boost.Asio をオススメしたいと思っている今日この頃ですが、いかにせんドキュメントがない。そういう中で、この記事はかなりいいと思います。長すぎない、ちょうどいい分量のコードを使って解説がされている、という印象を受けました。

C++の歴史、BoostCon 2010 体験記

読み物ということでレビューは割愛しますw

まとめ

Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)


Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)

Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)

  • 作者: アンドレイアレキサンドレスク,Andrei Alexandrescu,村上雅章
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2001/12
  • メディア: 単行本
  • 購入: 10人 クリック: 204回
  • この商品を含むブログ (99件) を見る

Exceptional C++―47のクイズ形式によるプログラム問題と解法 (C++ in‐Depth Series)

Exceptional C++―47のクイズ形式によるプログラム問題と解法 (C++ in‐Depth Series)

  • 作者: ハーブサッター,浜田光之,Harb Sutter,浜田真理
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/11
  • メディア: 単行本
  • 購入: 7人 クリック: 115回
  • この商品を含むブログ (65件) を見る

More Effective C++: 35 New Ways to Improve Your Programs and Designs (Addison-Wesley Professional Computing Series)

More Effective C++: 35 New Ways to Improve Your Programs and Designs (Addison-Wesley Professional Computing Series)

『Effective C++』『Modern C++ Design』『Exceptional C++』なんかを読んで、「はぁ、C++ってこういう言語だったんだ」と、C++を再発見したけれど、周りにそういう書き方実践している人いないし…と寂しい思いをしている人に。もちろん、これらの書籍を一通り読んだ後のために積ん読しておくのにも、おすすめです。