C++0x

C++0x の std::unique_lock - std::defer_lock と std::adopt_lock でちょっと高度なロック管理

http://cpplover.blogspot.com/2011/07/mutex.html C++ のソースコード中に「途中のreturnや例外に気をつけること」などといったコメントはあってはならないため,補足. // 排他的にアクセスするリソース class exclusive_resource { public : std::vector<int> </int>…

C++0x Memory Model 第1回 - 1.9 Program execution

前回の記事:C++0x Memory Model 第0回 - メモリモデルとは何か以下では, C++0x プログラミング言語の標準規格として一貫して N3225 を参照しています.文中で (1.9/12) などという表現が出てきた場合は N3225 における条項を指しています. 太字かつ斜字体…

C++0x Memory Model 第0回 - メモリモデルとは何か

私は,スカートを履いた女の子に,スカートを履いたままぱんつを脱いで,脱ぎ終わったら右手を挙げるようにと,そう命令した.私は,その子が右手を挙げたのを確かに見た.だが,その子のスカートをめくってみたらぱんつはまだそこにあったのだ! - http://t…

任意の expression に透過的に hook を仕掛けるようなマクロが書けるのではありませぬか?

以下のコードでやっていることの説明. EXCEPTION_HOOK((expr))と書いておけば, (expr) という C++ の式を実行したら急に例外が来たので……というときに, call stack のようなもので殴られた跡 (この hook が仕掛けられている場所に関する情報) を boost::e…

A*

http://okajima.air-nifty.com/b/2010/01/post-abc6.html 余計なことして遊んでたらマジで制限時間ギリギリの3時間かかってしまった...orz しかも色々はしょっているわ,出力に S, G が出てないわ... A* で discover されなかったノードに対する情報を…

X / _ / X < "むぅぶせまんちくす!";

あああああぁぁぁぁぁもおおおおおちょおおおおお気に入らねえええええぇぇぇぇぇ!!!!! 以下のコードは GCC 4.3.0 以降で -std=c++0x オプションを指定しないとコンパイルが通りません. #include <string> #include <iostream> template<typename T> struct lr_impl{ static int cons</typename></iostream></string>…

いや,そんなことよりも lambda expression + typeof

今一番試してみたいのが lambda expression + typeof.もうこれはヤングなバカに受けナウ間違いなし.

Multiple Placement Construction

http://d.hatena.ne.jp/faith_and_brave/20080526/1211793189 >曲芸的なアプローチ というのはつまりヒロイン追加のコンシューマ版が発売されて,それがPCに逆移植されて,なおかつクリスマスやらサマーバケーションやらことあるごとに……じゃなかった.今の…

文字列は文字列の連結という2項演算に関して semigroup ですよ.あー,いや, monoid か……なんていちいち考えるっぽ?

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2645.pdf いや,こういう最も原初的で代数的な concept から組み立てあげる方向性は,まったく間違ってはいないし, STL (によらず汎用プログラミング全般) 的にいって王道的進化だとは思うし,非…

structual よりも non-intrusive だと思うにゃー

http://www.kmonos.net/wlog/85.html#_0905080505 う〜ん, structural かどうかではなくて non-intrusive かどうかっていう軸の方が重要だと思うんですけれどどうなんでしょうかねー. non-intrusive という言葉を明快に定義してくれている書籍なりサイトな…

なんで requirement に関する推論が欲しくなったかというと,以下のようなのを見てたらうにゅーんっていう. たとえば, // とりあえず細かいことはおいといて,「型 T はデフォルトコンストラクタを持ってる」という制約の記述だと思って! concept Default…

そういえば,ある汎用アルゴリズム (関数テンプレート) の実装が与えられたときに,その汎用アルゴリズムの requirement 項に関する推論機構が欲しいと誰かが (俺かぁ!) ほざいてた気がするけれど, requirement に記述した制約 (インタフェイス) のみを使…

concept via type class

Haskell に type class が導入されている motivation についてまとまってるサイトにゃいかにゃー. Haskell の type class を通して C++ の concept を見てみたいの会.あと, C++0x の concept で functional dependency が手軽に扱えそうか/有用そうかどう…

concept-based overload の使い道はそれこそいくらでも……

http://d.hatena.ne.jp/NyaRuRu/20080328/p1 (C++[0x] の言葉でいうところの) concept-based overload と,関数テンプレートの partial ordering が混ざった話だけれど, concept-based overload に関しては >まあ使い道がそんなに沢山あるかというとそこは…

Re: std::reference_closure の存在意義

昨日のk.inabaさんのコメントにいったん納得しかけたけれど void funcWithCallback(std::reference_closure<int(int)> const &f); // 定義は別のバイナリにある void g() { int i = 42; funcWithCallback([&](int j){ return i * j; }); } これが std::reference_closu</int(int)>…

シグネチャに対するパタンマッチぐらいはないと AOP とはいえないんじゃなイカ?

http://d.hatena.ne.jp/Cryolite/20080318#p2 concept maps で追加・置換できるのは良いけれど,少なくともシグネチャ (関数名含む) に関するパタンマッチ的なことぐらいはできないと AOP とはいえないでゲソ. っていうか, identifier をメタプログラミン…

std::reference_closure の存在意義がやっぱりよくわからにゃいにゃー

lambda expression が std::reference_closure という形で実装可能なのは郵便はみがきさんが書いていらっしゃるとおりですけれど, std::reference_closure の形式よる実装が可能 (つまりシグネチャが同一の lambda expression は同じ型を持つ) ということは…

参照経由のみで環境にアクセスする lambda expression がなんで reference_closure 型にならなあかんねん

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2550.pdf ローカルの変数の値を全部参照で読み書きするならば, 8 If every name in the effective capture set is preceded by &, F is publicly derived from std::reference_closure (20.5.17)…

concept_map 使って AOP にゃ

concept_map 使って aspect-oriented に書こうとすると,異なる concept_map 導入する関数を各々書く感じになるんかにぇ? concept G<T> { void do(T &); } template<G T> concept SynchronizedG<std::pair<T, std::mutex>> : G<std::pair<T, std::mutex>> { void do(std::pair<T, std::mutex> &p){ std::unique_lock lk(p.second); G::</t,></std::pair<t,></std::pair<t,></g></t>…

Why I No Longer Like or Use C++

上を引用しておいて http://prophipsi.blogspot.com/2008/03/why-i-no-longer-like-or-use-c.html そういえば ABI 周りって C++0x 何か進展する見込みってあるっけ? move semantics なんて C++ 以外じゃまず要らんとですよ ま〜,少なくとも move semantics…

A Brief Introduction to Rvalue References

http://www.artima.com/cppsource/rvalue.html

tuple を受けて func(tuple.template get(), tuple.template get(), ...) な構文に forward する

技法思いついて iヽ、 /ヽ、____ _ノ _,.ゝ-=-<、__ フ _____ゝ'" `ヽ _ゝ `γ´ , 、 ヽ\ /! ,.イ /ヽ!、 ノヽ, /_メ」_ ゝ ', ゝ ./ l く i / ハ rト、 V´,. - 、ゝル ヽイ ./ / あたいったら天才ね ,.ヘi`レハ ハイヒ.! / i ヽ、/ / ', ヽ、ノi l " _ ".〈/ ハ /´゙〉 .…

placement insert

http://d.hatena.ne.jp/faith_and_brave/20080310/1205149207 いや,この暗黙の変換ははじかれるべきでしょう. conversion constructor が implicit なのか explicit なのかを識別するのは (concept がないと) 難しいと思うけれど,いずれにせよ, explicit…

concept のメモ

インタフェイス定義としてみたときの concept の特徴 concept の定義ってまんま純粋なインタフェイス記述だけど,他の OO な言語一般におけるインタフェイス定義のあり方から見ると 他のインタフェイスに依存する形のデフォルト実装が書けちゃうもん! conce…

あらやだ, new と auto って一緒に使えるようになる予定なのね

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf auto x = new auto('a'); // allocated type is char, x is of type char* (^o^)キャー

>>

そーいやまともに追いかけてなかったんですが,結局右シフト演算子の問題は後方互換性が無い方の解決策で落ち着きそうなんでしょ〜か? (以下は GCC 4.3.0 以降を利用することを前提としたコードです) // test.cpp #include <iostream> template<int I> struct X { static i</int></iostream>…

GCC 4.3.0 リリースキタ━━━━━━(゚∀゚)━━━━━━ !!!!!

ということで, GCC 4.3.0 で実験的に実装された C++0x フィーチャーと,目を離した隙にいつの間にかかなりの部分で総書き換わっちゃっている標準ライブラリについて,実際に GCC 4.3.0 でコンパイルできるコードでもって徹底解剖しちゃうお!

Move があっても,やっぱり Placement Construction は要るんじゃね?

なので http://d.hatena.ne.jp/Cryolite/20060728#p1 は取り消し. 現在は, move は placement construction の完全な代替にはなりえないため, move が標準ライブラリに導入されても,同時にライブラリレベルでの placement construction のサポートが望ま…

Placement Construction

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2345.pdf これ (placement insert の提案の元) 読んでも,配列ベースのコンテナ (std::vector/std::deque) については,placement insert と,右辺値で push_back/insert 呼ぶ場合との差異がやっ…

http://d.hatena.ne.jp/Cryolite/20080301#p18 このエントリ書いた子, variadic template の push_back の意味勘違いしとったね. (後ろに可変個数 append するヤツだと思ってた) この push_back って従来の push_back と最後尾への emplace 兼務するのな.