- Amazon.co.jp ・本 (343ページ)
- / ISBN・EAN: 9784798120393
作品紹介・あらすじ
知られざるC++の真の姿。玄人を志向するプログラマのためのメタプログラミング技法、メタ言語としてのC++がマスターできる。プログラムコードの圧縮とコーディングコストの軽減を実現。
感想・レビュー・書評
-
# 1周目 読み終えた
もう今となっては相当古い本なのだけど、内容は古びていない。ぜひマスターして自在に操ってみたいと思わされる。それは、現実の問題を解決するためと言うより、ただ楽しみのために身につけてみたい。学習に支払った分に対する見返りなどは求めてはいけない。面白ければそれで良い。そういう無欲な態度で望めば、図らずとも何かしらプログラミングの新しい視点が得られる可能性は高い。それはおまけ程度に期待しておいてもよさそうだ。
一度、5章まで読んだところで中断していて、1年以上たってから再開した。全然覚えていないので最初から読み直そうかとも思ったが、とりあえず一度は最後まで通しておいてから、それからどうするか判断することにした。
一応、最後まで読み進めることができたのだが、練習問題は全部スキップしてきたし、コードもほとんど書いてなくて、実験もしていない。ただ読んだだけという感じで、達成感もあまりない。なるべく早いうちに再読したい。
日本語の文章自体はまだ読めなくもないものの、奇妙な訳語が目に付き、集中力を乱されっぱなしだった。前からその問題には気づいていたので、原著は確保しておいた。次はそちらを読むことになる。
## 付録を読んだ
### 付録A プリプロセッサメタプログラミング入門
半分くらい読んで、ついていけなくなったので流しておいた。
### 付録B キーワード typename と template
とりあえずコンパイルしてみてエラーになったら追加するのはみっともないし、効率が悪い。しかし、必要なところで確実にピンポイントで添えることができるかというと、ちょっと自信がない。
### 付録C コンパイル時の性能
およそ20年前のコンパイラの状況では、GCCはあまり良い成績になっていないようだ。現在では大きく改善されていることに期待したい。
### 付録D MPL可搬性のまとめ
GCC 3.3やMSVC 7.1の時点で完全に対応している。その後、現在でも変わっていないだろう。
## 11章を読んだ ➤ DSEL設計リハーサル
有限状態機械のフレームワークを作ろう。CDプレイヤーが例となっている。これまで学んできたことを総動員してまとめ上げる、という感じではなく、部分的はいくらかテクニックを使用しているが、必要になるのは、表現したいDSELの記述方法を実現するためにはどうすればよいかを考えて、実際にC++のテンプレートによってそれを実現する能力だ。ここでは、どのようにして問題を分析して、設計して、書くかの一連の流れを体験してみることに価値がある。そういう意味で、リハーサルと呼ぶのは的を得ている。これ1回だけやっただけで実戦で使えるようになるとは期待しないほうがいい。何度も繰り返し練習が必要になる。テンプレートメタプログラミングの面白い部分を学んだとしても、現実の問題に応用できなければやはり価値は半減してしまう。最後でこのように現実と向き合う形で締めるのは、理想的な終わり方だ。
## 10章を読んだ ➤ ドメイン固有埋め込み言語
テンプレートメタプログラミングはDSELを生成するために使用されたのが始まりらしい。テンプレートメタプログラミングを学んでいくならば、原点に戻るという意味で、一度はDSELを開発しておくことを経験しておく必要があるだろう。C++はDSELのために必要な特性を備えていて、相性がよいようだ。
DSELを実践しているものとして、いくつかのライブラリが登場する。Blilz++、Boost Bind、Boost Lambda、Phoenix、FC++、Boost Spirit。この中で、Boost SpriteはYACCのようなパーサを定義するためのフレームワークであるのだが、かなり扱いが難しそうだ。というか、よくわからないので軽く流しておいた。
## 9章を読んだ ➤ コンパイル時と実行時の境界横断
また面白くてつい読みふけってしまった。ここではテンプレートのよく知られたパターンやイディオムでも言うべきものについて書かれている。おそらくこれらを紹介している本の、原典はまた別にあるとしても、出典はこの本なのではないかと思われる。これまでの章と違って、実践的な使用に直結しやすいため、かなり読みやすい章ではないかと思われる。
## 8章を読んだ ➤ エラーメッセージ
流し読むつもりがじっくり読んでしまった。冗談じみていてかなり面白い。あまりC++のエラーメッセージがひどいことで被害を被ったことがないので、他人事のように思えているからかもしれない。C++11ではstatic_assertが、そしてC++20ではついに待ち望んだconceptが導入されるので、状況はずっと良くなっている。こういう時代があったのだなと、過去のものになる日がそのうち来るのかもしれない。
## 7章を読んだ ➤ ビューと反復子アダプタ
流し読み。C++20のrangeライブラリと共通するところがある。
## 6章を読んだ ➤ アルゴリズム
1年以上ぶりくらいに再開。何も覚えていないが、一応途中から再開してみる。何の話をしているかくらいは分かる程度。これは分かるとは言わない。このまま一旦軽く最後まで読み通してから、もう一度読み直すか、今の段階で最初に戻って丁寧に読み直すか、迷うところだ。
変な訳が目につく。sequence→列?、arguments→アーギュメント?など。この訳でもう一度読みたいとは思わない。原著も確保してあるので、このまま最後まで読んで、2周目はそちらに切り替えることにする。詳細をみるコメント0件をすべて表示 -
難解。
-
本のタイトルが誤解を招くと思います。個人的にはBoost云々は置いておいて、C++でテンプレートを使ったメタプログラミングの核が学べると思っての購入でしたが。
書いてあることはいろいろと有用ではありましたが、自分にはちょっと難しかったかなというのと、ちょっと方向性が違ったといったところです。 -
訳語がときどきおかしいけれど(intrusiveを侵食的と訳すのやめてほしい)、内容に関しては文句なしです。