Google
ブログ(iiyu.asablo.jpの検索)
ホットコーナー内の検索
 でもASAHIネット(asahi-net.or.jp)全体の検索です。
 検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。
 例 中村(show) ki4s-nkmr

ウェブ全体の検索

C++テンプレートプログラミングの定番本の第2版、C++ Templates The Complete Guide Second Edition2018年10月16日 10時27分26秒

ASAHIネット(http://asahi-net.jp )のjouwa/salonから。
---
 Modern C++と総称されるC++11以降のC++。
 数ヵ月前に調べたとき、日本語で書かれたModern C++のテンプレートプログラミングのいい本、それもC++17をカバーしているいい本がなかった。

https://www.amazon.co.jp/exec/obidos/ASIN/4894714353/showshotcorne-22/
Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術(C++ In‐Depth Series) 単行本 – 2001/12
アンドレイ アレキサンドレスク (著), Andrei Alexandrescu (原著), 村上 雅 章 (翻訳)
というのがあるが、この本は、2001年12月発行。
 原書ペーパーバックは2001年1月発行の古い本で、タイトルは、Modern C++ Designとなっているが、古いC++の本。C++11以降の、いわゆるModern C++とは、あまり関係ないといっていいくらいの本。それくらいModern C++は古いC++から進化している。
 著者のアンドレイ・アレキサンドレスクさんは、この本で、C++のテンプレートプログラミングの秘儀をたくさん書いた著名人で、FacebookでコアなコードをC++で書いていたけど、プログラミング言語Dに惚れ込んで、DでFacebookのコアなコードを書き直したり、そのうちFacebookもやめて、Dのほうで活躍していた人。今もそうかは、知らない。以前、ブログで書いたことがある。

関連:
http://iiyu.asablo.jp/blog/2016/03/01/8035159
プログラミング言語D。もう2年半くらい前からたまっていたメモが出てきた。\(^O^)/

 C++11以降のModern C++では、古いC++の技法はあまり必要ないというか、考え方は参考になるかもしれないけれど、古いC++で必要だった黒魔術的なテクニックなしで、テンプレートが書けるようにC++11以降は進化している。特にC++17になると、C++11よりもさらに進化している。
 アンテナハウスのブログ、
https://blog.antenna.co.jp/ILSoft2/archives/8850
C++の劇的な進化に圧倒されるModern C++
に書いたように、
--- ここから ---
テンプレートプログラミングの劇的な強化
constexprによるコンパイル時計算の強化。コンパイル時にいろいろ調べられるメタプログラミング機能、SFINAEをやりやすくする機能の強化。
--- ここまで ---
が行われていて、
--- ここから ---
C++とプログラミングパラダイムの関係を考えると、C++は、
Cの命令型プログラミング(手続き型プログラミング)に、オブジェクト指向プログラミングを追加
GenericsとTemplateによる汎用テンプレートプログラミング
といったマルチパラダイム言語に進化してきました。
Modern C++は、汎用テンプレートプログラミングというパラダイムをさらに推し進め、テンプレートメタプログラミング(TMP, Template Meta Programming)を強化し、流行りの関数型プログラミングの強化も抜かりなくやっていて、マルチパラダイム言語としてますます強力になった印象です。
--- ここまで ---

 英語なら、Modern C++の本、それもC++17対応の本がたくさん出ている。もちろん、テンプレートプログラミング、それもテンプレートメタプログラミング(TMP)の本も出ている。
 テンプレートプログラミングについては、
C++ Templates The Complete Guide Second Edition
David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor
を薦める。何カ月か前に買って、まだ、読み終えてないけれど。
 この本の初版は、古いC++でのテンプレートプログラミングの定番本でしたが、C++17対応に書きなおした本。

 ここで、ネタかつ教訓(笑)をひとつ。
 C++のプログラミング、中でもテンプレートプログラミング、もっといえばその中でも、テンプレートメタプログラミング(TMP)は、C++を書いていると思ってはいけません。\(^O^)/
 以前書いたように、Emacsをエディタと思ってはいけないのと同じです。\(^O^)/
 どういう意味かというと、Emacsは、Lispの処理系を作っていたら、なぜか知らないけどエディタを作るのにいい関数がいっぱいできちゃって(笑)、いつの間にかスクリーンエディタになってしまったものと考えないといけません。\(^O^)/
 TMPも同じ。C++と似た文法のインタープリタ言語があって、その言語で書いてみたら、あら不思議。
 そのインタープリタは、書いたプログラムをテンプレートと考えてプログラムをC++に変形してくれて、最終的にはネイティブコンパイルまでしてくれて、高速なコードを作ってくれる。
 したがって、テンプレートやTPWを書く立場としては、C++はコンパイラではなく、テンプレートという表現を使って、コンパイラが生成する中間表現である抽象構文木を操作するインタープリタと思って書くのが、正しい。\(^O^)/
 プログラマが好き放題に抽象構文木をいじれて、言語を勝手に拡張できる、LispのS式とマクロに比べると、C++のテンプレートはややこしいのが弱点だけどね。

 なお、この本のKindle版がアマゾンには2種類あったの。片方は、安かったので、買ったら、大失敗。
 まだ草稿段階みたいな本で、変なところで赤い文字になっていたり、めちゃくちゃなレイアウトだったりして、あまりにひどいので、アマゾンに文句を言ったら、とても読める本ではないとひどさを認めて、キャンセルしてくれた。
 この本の電子書籍を買うなら、InformITで買ってください。PDF, EPUB, Mobi(Kinlde)が買えます。今は、40ドルくらいで、この3つのフォーマット全部買えます。
 ぼくは実際に買ってみましたが、PDF, EPUB, Kindle、どれもまとも。
 日本の電子書籍ではリフローでは索引がないか(もう2年前だが、インプレスの奴が、リフローはページが確定できないから索引は作れないなどと、ふざけた言い訳をしたのを紀伊国屋書店からのメールでもらっています)、索引がある場合はスキャン画像の本になっているのが大半だが、この本を含めて、ぼくが買っている洋書は、どの出版社も索引もちゃんとしている。その話を書くといって、2年は経っているので、すみません。

http://www.informit.com/store/c-plus-plus-templates-the-complete-guide-9780321714121
C++ Templates: The Complete Guide, 2nd Edition
By David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor
Published Sep 8, 2017 by Addison-Wesley Professional.
eBook (Watermarked)
Your Price: $38.39
List Price: $63.99
Includes EPUB, MOBI, and PDF

 なぜ、InformITかというと、
http://iiyu.asablo.jp/blog/2018/01/31/8779660
Scala for the Impatient (2nd Edition)、基礎からわかる Scalaほか、Scala本
で書いたように、
--- ここから ---
本書は、Addison-Wesleyから出ているが、Addison-Wesleyは、Pearson(ピアソ ン)のグループなので、Pearsonまで行ってみた。
(略)
しかし、電子書籍が見あたらないので、探したら、InformITで売っていた。
(略)
いまや、Addison-Wesleyなど、Pearsonの本は、InformITで買う方がいいのね。
--- ここまで ---
ということです。

 それから、この本のサイトもあります。
http://www.tmplbook.com
C++ Templates - The Complete Guide, 2nd Edition

関連:
http://iiyu.asablo.jp/blog/2018/08/15/8942252
モダンC++(Modern C++):江添亮の詳説C++17
http://iiyu.asablo.jp/blog/2018/08/14/8941408
C++の劇的な進化に圧倒されるModern C++
http://iiyu.asablo.jp/blog/2017/06/03/8584002
基礎からしっかり学ぶC++の教科書 C++14対応、Optimized C++、C++ ポケットリファレンス、改訂新版 C++ポケットリファレンス
http://iiyu.asablo.jp/blog/2017/05/23/8572667
型推論。C++の型推論なら「Effective Modern C++ ―C++11/14プログラムを進化させる42項目」が必読。オライリー・ジャパンで買った、この本の電子書籍のことも
http://iiyu.asablo.jp/blog/2015/09/25/7812131
マーティン・レディ著「C++のためのAPIデザイン」
http://iiyu.asablo.jp/blog/2015/09/25/7812140
Effective Modern C++ ―C++11/14プログラムを進化させる42項目、C++11/14コア言語
http://iiyu.asablo.jp/blog/2014/09/26/7443432
Effective Modern C++, C++11, C++14。C++ Multithreading Cookbook。ICT業界の技術者が、若いときにやっておくべきこと。

ネタ:
http://iiyu.asablo.jp/blog/2017/02/14/8360963
C++ std::stringが、こうやったら、最強やのぉ。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
一富士、二鷹、三は? ひらがなで。

コメント:

トラックバック

Google
ブログ(iiyu.asablo.jpの検索)
ホットコーナー内の検索
 でもASAHIネット(asahi-net.or.jp)全体の検索です。
 検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。
 例 中村(show) ki4s-nkmr

ウェブ全体の検索