C++ Ramble

typeofエミュレーションの内部実装の説明

http://article.gmane.org/gmane.comp.lib.boost.devel/121135
このCry's Diaryでtypeofエミュレーションの実装詳細の説明をしようと思っていたのですが,BoostのTypeofエミュレーション実装者本人が解説記事を書いてくれちゃいました.
typeofエミュレーションは恐らく最強クラスのTemplate Meta-Programming応用例です.何せやっていることがTemplate Meta-ProgrammingによってC++おける型構造を構文解析しちゃうって代物ですから.

GPL, LGPL, BSL, ...

("GNU GPL")
1プログラマの最低限の知識として[L]GPL等の主要なライセンスの詳細をもうちょい詰めて理解しておいたほうが良いかにゃ〜.前からやろうとはしているんだけれど.もちろん[L]GPLのライブラリなんかを使う機会はあるので基本的な知識は持っているんだけれど.何か勉強になるサイトか本ないかにゃ〜.

自殺のためのboost::shared_ptrの方法

http://thread.gmane.org/gmane.comp.lib.boost.devel/121141
さすがにPeter Dimov氏はスマポのスペシャリストだにゃあ.reentrancyやthread safetyについてもさらっと触れてくれてる.う〜む.
http://article.gmane.org/gmane.comp.lib.boost.devel/121158
自分みたいな素人だと見落とすんだよな〜,こういうとこ.

MSVC(6.0, 7.0, 7.1)専用,高速・登録不要のtypeofエミュレーションの実装

http://thread.gmane.org/gmane.comp.lib.boost.devel/121302
http://d.hatena.ne.jp/Cryolite/20050418#p1で取り上げた登録不要のtypeofエミュレーションの実装です.っていうかさすがに実装速いな〜.

Unicode文字列

http://thread.gmane.org/gmane.comp.lib.boost.devel/120124
これも難しいよな〜.誰かすぱ〜っと良いアイデア出してくれないかにゃ〜.
http://article.gmane.org/gmane.comp.lib.boost.devel/120317
ちょっと話題がそれるけれど,どのレイヤー(抽象度)で型を消すかってすごい重要なポイントになりそうだにゃ〜.静的多相と動的多相をどこでどういうトレードオフに基づいて切り替えるか?どうやればスムーズに切り替えられるか?って議論とかはぜひぜひ読んでみたいにゃ〜.そういうのについて書いてくれる本があったら個人的に即名著に認定するにゃ!!

iteratorの先にあるもの

http://thread.gmane.org/gmane.comp.lib.boost.devel/121065
何か・・・新しい世界が開きつつあるな・・・確実に.もう少し待ってたら何か凄いのが出てくる予感.

Another point is that the whole iterator/const_iterator thing is artificial and broken anyway. My work has evolved towards a "cursors and property maps" arrangement where cursors encode position/traversal and property maps encode access. In that scheme there's no difference between the cursors used when traversing constant and mutable containers. Of course, if you want to be able to get read access to a non-const property map rvalue you may need two overloads for that purpose.

iterator/const_iteratorは要素のwritability/mutabilityとposition/traversalという直交した概念を同時に含んでいるから,これをcursorとproperty mapに分割しようってか.はふ〜ん.

Hybrid runtime/compile-time iteration. Generally it means full unrolling of any loop.

よしコンパイル時に色々できるのは分かった,次はruntime/compile-timeのハイブリッドだぁ〜!別にコンパイル時だけのfull unrollingだけじゃなくて,それこそruntimeなコードの一部分をcompile-timeのunrollingにしてしまうよ〜な,まさにハイブリッド!な方向性もそのうち出てくるに違いないっ!!
#昔,runtimeな行列積のコードの内部でTMPによるunrollがかかるよ〜なヤツ書いたんだけどにゃ〜.どこ行ったかな?あんな感じの方向性を期待してるんだけどにゃ〜.

Function call syntax is good for interoperability (e.g. using Boost.Bind). This insight is Doug Gregor's contribution. Using [] for current Boost property maps was probably a mistake.

property mapにoperator[]使うのは,他のライブラリとの協調を考えると欠点ってかー.なるほど.確かに言われてみるとoperator()の方が色々都合が良いですな.

BOOST_GCC

http://thread.gmane.org/gmane.comp.lib.boost.devel/121614
今までなかったのが不思議.別になくても困るものじゃないんだけれど,環境を切り分けるためにを使うのが癖になっている人間としては

  1. BOOST_GCCってコードに書く
  2. 「BOOST_GCCなんてねーよごるぁ!!」とコンパイラさんに怒られる
  3. GCCを識別するためのマクロってなんだったっけか?
  4. あぁ,そうだ."__GNUC__"でした.

というのを毎回やらかしているので,これでほんの少しだけ楽になる・・・のか?