Entries from 2010-01-01 to 1 year
http://ratiwo.blogspot.com/2010/12/comfrk-vol-2.htmlvol1 に引き続き、何か書きました。C++0x のムーブセマンティクスに関してです。基本的なモチベーションであるとか、そもそも参照って何?右辺値って何?みたいなレベルの話から、コピー、ムーブの可否…
循環参照というと C++ では下のようなコードのことを指すわけですが、 struct A { shared_ptr<B> bp; }; struct B { shared_ptr<A> ap; }; shared_ptr<A> ap(new A()); shared_ptr<B> bp(new B()); ap->bp = bp; bp->ap = ap; これに対する解決として weak_ptr を使うと</b></a></a></b>…
なんか完全に間違えてました。本来は既に管理しているオブジェクトの一部をさす時に使うためのものなので、カスタムデリータが必要なんでした。 struct B; struct A { weak_ptr<B> b; }; struct B { weak_ptr<A> a; }; struct Deleter { Deleter(B* b) : b(b) { } </a></b>…
別に自身の直接のメンバじゃなくてもよかったんですね。 struct A { mutable int i; }; struct B { void f() const { a.i = 0; } A a; }; 知らなかったというか、考えたことがなかった。あと const と同じで別に推移的ではない。
これは C++ advent calendar の参加記事です。真面目な C++0x の紹介や入門は 25 日もあれば誰かが書いてくれると思うので、C++0x について何も知らなくてもすぐに分かる、ちょっとだけ幸せになれるかもしれない極めて些細な tips を書きます。後に変態記事…
絶対迷うまい、とあらかじめ地図をしっかり頭に叩きこんでおいたのに、まさかの乗り換え時に迷子っていう悲劇が発生しました。走り回って、凹んだ。 プログラミング言語Polemy(仮) ようは eval に評価機を指定できる言語、とでもいえばいいのかなあ。 eval(e…
ピンをたてたり、既読にしたり未読にしたりする操作は、同時に一つしたの項目に移るべきだよなーと思ったのでそうした。 ブラウザで開く処理が同期的に処理されてるみたいで、複数ピン立ててブラウザで開くのがあまりに辛い。それが辛くなるようなスペックの…
もう一月前の話ですが…忘れる前に書いておきます。ocaml の多相関数が、より効率のよい単相な関数に置き換えられるのは、全適用の形でかかれている場合のみ、というちょっとした罠があります。詳細はこちら→ http://d.hatena.ne.jp/camlspotter/20100130/126…
RSS リーダーというのをボクも使ってみようかしら…ということで google reader を使い始めました。rss とかブラウザで見る必要性ないでしょ、ということで CUI のクライアントを探したら peep というのがあったのでした。やったー。認証に関する API の仕様…
テストサーバーのアンドロイド sdk のアップデートが終わらないので暇つぶしに書きます。vim からアンドロイドのクラスリファレンスをひくものを作ってました。Eclipse でなく vim でアンドロイドの開発を行っているマゾの方は良かったら使ってみてください…
HIMA' に参加してきました。今回のお題は「gitとdarcsの使い方」。 darcs のパッチ理論の話とか聞けるかなーと思っていたのですが、聞けなかったのでちょっと残念でした。そもそもパッチ理論の話出来る人っているのかなっていう…とりあえず恐らく利用者が多…
前回の日記でコメントして頂いた cherry-pick ですが、これはコミットを一つしかとれないため、複数のコミットを扱う場合、何度も cherry-pick するか、rebase してブランチを操作するしかなくて悲しい…というのは昔の話で、cherry-pick でも複数のコミット…
例えば E-F / A-B-C-D みたいな状況があるとします。ここから、 E-F / A-B-C-D-F としてやりたい。どうすべきか。結局 git format-patch して git am したんですが、やろうと思えば E を消し去って F だけになったブランチを rebase したうえで fast-forward…
何か各自でスライドとか持ち込んで話す会だと思ってスライドとか真面目に作って行ったら、皆でダラリとおしゃべりする会だったようでビビリました。20 人集まってそれか…!という。でも集まり自体は非常に面白かったです。色んな界隈の色んな人たちが無作為…
これも rails バージョン 2.3.8 の話です。セッションには遅延ロードの仕組みがありますが、SessionHash#has_key? などの一部のメンバの実装は、Hash#has_key? の実装と変わらないので、そのまま使うとちょっとまずいです。適切に SessionHash#has_key? をオ…
たまには仕事の話をします。rails バージョン 2.3.8 での話。通常 reset_session してしまうと、そのセッションの id は失われてしまいます。reset_session 後にセッションの id を取得したい場合には、request.session_options[:id] に自前で id を発行する…
gcc のメーリングリストに、enum の前方宣言に関するパッチが、未完成ながらも投げられています。簡単そうなので enum class と一緒に実装されててもいいのに、と思っていたんですが、割合面倒なようです。gcc の現在のツリー構造では「まだ enumrator list …
accumulator generator というものがあります。暇つぶしに C++0x で書いてみました。 #include <memory> #include <functional> template <typename Num> auto accgen(Num n) -> std::function<auto (Num) -> Num> { auto np = std::make_shared<Num>(n); return [np](Num i) -> Num { return (*np) += i; }; } ラ</num></auto></typename></functional></memory>…
先週、ようやく range-based for が gcc-4.6 に実装されました。めでたい。さて range-based for ですが、規格によると for ( for-range-declaration : expression ) statement と { auto && __range = ( expression ); for ( auto __begin = begin-expr, __…
http://ls-al.jp/blog2/?itemid=3477 より。色んな map を書いてみます。 template <typename F, typename A> std::vector<typename std::result_of<F(A)>::type> map(const F& f, const std::vector<A> &v) { std::vector<typename std::result_of<F(A)>::type> r; for(auto it = v.begin(); it != v.end(); it++) r.push_back(f(*it)); …</typename></a></typename></typename>
ちょっとずつ書こうかなと思います。誰も書いてくれやしない…とグズっていても仕方ないことに気がついてしまいました。悲しいね… 勿論ボクも全然知らないことだらけなので、調べながら少しずつ、になってしまうとは思いますが、ぼちぼちやってみようと思いま…
プログラミングの魔導書を読みました。面白かったところだけ、軽く感想など書いてみます。Hello, C++ World! は kinaba さんのこの話がよりまとまったもの。本が出る前にちらっと内容は伺っていたんですが、矢張り面白かったです。たまに思うんですが kinaba…
メタプログラミング ruby を読みました。よくまとまっていて、いい本だなあと思いました。 個人的にはあんまり ruby で実行時にメソッドやクラス、モジュールを操作することはメタじゃないと思っているんですが…それはうさつのとして…折角なのでメタっぽい話…
FCD によると、C++0x では少なくとも 1024 回の再帰的なテンプレートの実体化が保証されることになっています。 1024 回というのは、通常は十分に大きく問題のない数字なのですが、メタプログラミングな気分の時には、ちょっと少ないカナ?という気持ちに、…
WebDav 越しに git のリモートリポジトリに push すると、push 時にリモートリポジトリ側で通常呼ばれるはずの、いくつかのフックが呼び出されません。公式のマニュアルにあるように、これらのフックは git-receive-pack コマンドが呼び出すものです。WebDav…
id:kikx さんに面白いソースコードを教えてもらいました。http://www.google.com/codesearch/p?hl=ja#ZmjNDPVeNGc/ssh.c&q=putty%20ssh.c&sa=N&cd=1&ct=rc&l=377C のマクロでコルーチンを実現しています。 マクロだけ見て理解するのはちょっと大変ですが、展…
元のやりとりが imihu なので意味が分からない話になってしまいましたが、そもそも目的の違う物を比較して、便利だとか不便だとか言っているのはよく分からない、ということが言いたかったのでした。最初からそういえばよかった。そして、比較とかしなくても…
http://togetter.com/li/42968全体的に違和感があったので、少し書きます。 yreeen: ファクトリなら機能追加を見越してバージョン番号を渡すように引き数作っとけばいいし。pimplの方が優れている部分が正直思い浮かばないんだけど何かあるんですか教えてえ…
エレガントにクラッシュさせることはできませんでしたが、FizzBuzz くらいはかけるようになりました。 ("","","Fizz") <<~<< ("","","","","Buzz")xx 20 Z|| 1..100嘘です
#include <cstdio> template <typename T> struct id { typedef T type; }; template <typename T> void f(T){ printf("T\n"); } template <typename T> void f(typename id<T>::type){ printf("id<T>::type\n"); } int main(){ f(0); f<int>(0); return 0; } 何がでるかな♪何がでるかな♪</int></t></t></typename></typename></typename></cstdio>