2007年09月06日

Boost C++Librariesプログラミング 第2版

Boost C++Librariesプログラミング 第2版 という本を読みましたので感想を書きます。

Let's boostの中の人によるboostライブラリの解説本です。
boostというのが何か、についてはGoogleで検索して下さい。
本書が扱っているboostのバージョンは現時点で最新の1.34です。 さらに一部1.35に追加される予定の非同期I/Oの説明が含まれています。

boostというのはC++のテンプレートを使った強力なライブラリなのですが、結構難解なので、使いこなすのは結構難しいです。 特に、使い方を間違えたとき、正しい使い方に辿りつくのが難しいのです。コンパイラが吐き出すエラーメッセージは意味不明ですし、 デバッガで動作を追ってもあちこちにジャンプするので、何をしているのか良く分かりません。
そこで、私は便利そうで簡単なライブラリ(boost::shared_ptrなど)を使いながら理解を深めていこうとしています。
本書は、boostとこういう付き合い方をしている方にお薦めの一冊です。
一気に理解を深めるほど効果があるものではありませんが、今まで使っていたライブラリへの理解がちょっと深まったり、 知らなかった便利で簡単なライブラリが見つかったりします。

例えば、私にとってはこんなありがたいことがありました。

  • 正規表現はライブラリをリンクしないと使えないものだと思っていましたが、 ヘッダファイルのインクルードだけで使える正規表現ライブラリboost::xpressiveの存在を知りました。 お手軽に正規表現が使えそうです。
  • boost::algorithm::to_upperやto_lowerで大文字/小文字変換ができることを知りました。 ポータブルな大文字/小文字変換ってあんまり簡単じゃないのでこうして提供してくれるのは助かります。
  • TCP/IPを取り扱うライブラリ(boost::asio::ip)の存在を知りました。但し使えるのはboost 1.35からのようですが。 SSLを扱うライブラリ(boost::asio::ssl)まであるなんてびっくりです。ついにboostにネットワークが入りました。
  • zlibで圧縮/展開するストリームライブラリ(boost::iostreams::zlib_compressor/zlib_decompressor)の存在を知りました。 これからはzlibを自前で呼ばなくても良いようです。
  • オブジェクトの直列化を行うライブラリ(boost::archive)の存在を知りました。 リンク構造まで気合を入れて直列化してくれるみたいです。 xml_oarchiveやxml_iarchiveクラスを使うとXML形式でオブジェクトを保存できます。ついにboostにXMLが!! でもシリアライズをするだけのXMLライブラリなのかな?ポータブルな汎用XMLライブラリが欲しい・・・
  • 乱数生成エンジンはたくさんあってどれが良いのか迷うことがありましたが、 メルセンヌツイスターを使ったboost::random::mt19937が周期が長く分布が均等で高速なのでお薦めされていることを知りました。 こうしてお薦めして貰えると助かります。
  • 関数オブジェクトは、boost::functionを使って保存できることを知りました。 関数オブジェクトを作り出すboost::bindは使っていましたが、保存できることは知りませんでした。Commandパターンを実装するときに使えそうです。
  • boostには単体テスト用フレームワーク(boost::unit_test_framework)があることを知りました。 cpptestとどちらを使うかは悩みどころです。

どれもそんなたいしたことではありませんが、ライブラリに対する理解が一歩深まったのは確かだと思います。 これからのC++ライフがほんのちょっとだけ楽になりそうです。

投稿者 MASATO : 2007年09月06日 00:30 | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?