comp.lang.c++.moderatedより
"C++ Templates - feelings honestly expressed"
http://www.talkaboutprogramming.com/group/comp.lang.c++.moderated/messages/159409.html
こういう否定的な部分も含めたtemplateに関する議論を読んでみたかったんですよねぇ〜.
Templates can be used for good or evil. [snip] There are numerous other examples of such domain-specific embedded languages, c.f. Boost.Lambda, which allows: [snip: boost::lambdaの使用例] or Boost.Spirit (http://spirit.sf.net), which allows one to easily write parsers directly in C++ code.
domain-specific embedded languageは変態templateライブラリの大きな成功例でしょうね.特にC++の演算子overloadが最大限に生きてきますし.それでも,あのエラーコードのon paradeにしょっちゅう泣かされるんですけどw.compile-time assertionでライブラリ実装者が書いたメッセージがコンパイルエラーの表示として出てくる仕組みがC++の言語仕様としてあったらなぁ,とつくづく思います.
でも一つ思うんですが,Heavily Templatized Library使う人間ってだいたい漏れみたいなかぶれた人間なんじゃないでしょうか・・・.それに,あれの保守をtemplateをろくに知らない人間に任せられるか?と訊かれたら漏れの答えは多分No...
http://www.talkaboutprogramming.com/group/comp.lang.c++.moderated/messages/159498.html
わーぉ♪さすがにDavid Abrahamsの投稿は違うわw.C++のコード見て笑ったの久しぶりw.っていうかこの書き方早速参考にさせてもらいますw.
俺様メモ:IMHOはIn My Humble Opinionの略,と.ってそんなの知るかヴォケ!!
まだarchiveに入らないのでciteできませんが,templateをきちんと扱える(リファクタリングなどのための)toolがないのがbottle neckだという主張もありますね.なるほど.
http://www.talkaboutprogramming.com/group/comp.lang.c++.moderated/messages/159475.html
読んで追いかけるのが難しいコードよりもマクロ(プリプロセッサマクロじゃなくてm4などのさらに高位のマクロ)の方が良い,という主張の方に対して否定的な意見が出てました(これもまだarchiveに入っていない).
ところで,プリプロセッサマクロはどうなんでしょうか?templateとプリプロセッサマクロを比較すると
- templateは言語の枠内にとどまっており,統一的に扱える.もちろん,マクロも立派なC++の範疇として保証されていますが,あくまでコンパイルの前段階で処理され,言語の提供する強い型安全性などの恩恵をまったく享受できません.
- マクロは文字列の置換でしかなく,templateにしかできないことは多い.逆にマクロにしかできないことも多いが,非常にprimitiveな操作しかできず,マクロにしかできないことの恩恵は少ない.ただし,その数少ないことの効力は絶大なことが多い.
おそらく現在のほとんどの主流となる主張は「マクロはマクロでしかできないことにしか使わない」なんでしょうね.
私の場合,実はマクロには非常に興味があり(もちろんマクロにしかできない問題領域で),これをtemplateでできないものかと考えていくうちに底なし沼(褒め言葉!!w)にハマってしまった,というのが変態への道を歩むきっかけだったのですが,最近やっぱり特定の部分はマクロにしか無理かな?とまた思い始めています.まぁ,これは私の仕事と深くつながっていることで,そのうちにここで薀蓄を述べさせてもらうつもりですが・・・
投稿内でScott Meyersの言葉が引用されていました.
As a general rule, Boost has very little visibility, the Standard not much more (many programmers make no distinction between the behavior of their compiler and the behavior dictated by the Standard), and the STL (which everybody has *heard* of) is still viewed as largely foreign territory
う〜む,彼がこういうことを言うのですか...私みたいに規格書の必要性を切に感じる人間なんて非常に少ないんでしょうか.それは残念ですw.非常に濃い内容がぎっしり787ページ詰まって$18なんてお買い得も良いところだと思うのですがw.
結局のところ,変態はただわが道を逝くのみ,ってことですかw?better Cとしてのみ使っている人が別にtemplateを知らないくても良い(むしろこれ以上templateの犠牲者を増やすなとw).私は私でいつものようにコンパイルエラーのon paradeに泣かされるとw.本当,C++のtemplateの文法が悔やまれてなりません.
#templateの文法やコンパイルエラーのひどさにけちつけている人って多いかと思っていたら,それらに言及している方がほとんどいらっしゃらないですね.そこら辺はすでに暗黙の了解ってことなのかしらん?