2009-12-01から1ヶ月間の記事一覧

自分の書いたソースには過去の自分の見識しかなく、先人の書いたソースには先人の見識がある

このように数多くのプログラマが「車輪の再発明」の罠に悩まされているのですが,車輪の再発明(より正確に言うと,車輪の再実装)にはそれなりに意義もあります. 車輪の再実装 - Life like a clown id:tt_clownさんの反応に対してですが、 まず、自分も「…

「俺のソースだから」というプログラマは死んだらいいのに

最近こんなやりとりがあった。 「Cって標準のコンテナ(双方向リストや可変長配列など)がなくて不便。 Cのプロジェクトってコンテナ自体ないこともあるし、コンテナがないとプログラムって書きにくいよね。 その点C++はSTLが(ry」 ... 「コンテナ? STL“も”…

dlmallocはC++があったから生まれたといっても過言ではないのだ

なんだってー!!!!(;゚д゚) (゚д゚;(゚д゚;) いや、過言かもしれませんが、C++の存在がdlmallocを書く切っ掛けになったのは確かです。 dlmallocは現在はLinuxなどのデフォルトのmalloc実装ではありませんが、 dlmallocは本当に優れたアルゴリズムを持って…

とある愚直のリニアサーチ

前のエントリで線形探索のメモリアロケータは駄目だ駄目だ、と言いました。 で、まず線形探索の何が駄目って、メモリは以下のようになっています。 最初は「未使用領域(青)」しかありません。ここからどう領域をとっても良いです。 ただ、使っていくうちに…

とある愚直のアロケータ

前置き。dlmallocについて書くぞ!と言っておいて書いてなかったので。orz...すみません。 あろけーたをじぶんでかいてはいけません!! なぜ、って大抵糞だからです。 例えば、こんな管理構造を持ったアロケータをよく見るんですが、 typedef struct _Alloc…

STLも解析してくれる静的解析ツールcppcheckを試す、と思ったら……

静的解析ツールって商用のものだと結構あるわけですが、 まぁ、基本的にこんなツールは有用性を示してもぽんぽん買ってもらえる訳もないので オープンソースに依存するわけです。 で、C++ならSourceForge.net: cppcheck かなあと思ってプロジェクトにかけて…

とても邪悪な解き方

Cクイズ こっちわからん>< - So Many People, So Many Different Ideas /* MyTypeの定義 */ void set(MyType m, int val); void inc(MyType m); void print(MyType m); int main(void) { MyType m; set(m, 0); /* mを0にセット */ inc(m); /* mをインクリ…

配列をポリモルフィックに扱ってはいけない

元々は 今日の仕組まれたバグ こちらを見たときにずっと書こうと思っていたネタです。 num が 1 の状態でしか確認されてなくて、いざ使うことになって2以上にした途端に Segmentation fault するとか嫌がらせだろw ただの凡ミスなんだろうけど、なんかテス…

NRVO(RVO)とMove Semantics

ムーブセマンティクスについて調べたところで自分が気になったこと。 BigFatMovableObject GetBigFatMovableObject() { BigFatMovableObject mo; return mo; } int main() { BigFatMovableObject mo(GetBigFatMovableObject()); return 0; } 最初、自分はこ…

で、結局のところ右辺値参照ってなんなのさ?

いよいよ、右辺値参照とは何か、ということです。 ムーブコンストラクタと、コピーコンストラクタの話を前にしました。 ここで、 ムーブコンストラクタを持つオブジェクトは「移動可能オブジェクト(movable object)」である。 コピーコンストラクタを持つオ…

Move semantics に対応した Boost.Containersとは?

ということで、再びBoost.Containerに戻ってきました。 (コピーコンストラクタと、ムーブコンストラクタについてよくわからない場合は前の記事へ) ムーブセマンティクスに対応する、というのはどういうことかを考えます。 では、ムーブコンストラクタに対…

C++における「コピー」と「移動」、ムーブセマンティクスへ至る病

まずムーブセマンティクスとは何か、ということは忘れます。 C++における「オブジェクトのコピーと移動」について考えます。 C++にはオブジェクトに対して「コピー」と「移動」という概念があります。 一般的なのは「コピー」です。 お馴染みの「コピーコン…

Move semantics に対応した Boost.Containersを試す

id:melponさんに教えて頂いた Boost.Containers を軽く試します。 Boost.Containerライブラリは、STLコンテナを含むいくつかの有名なコンテナを実装します。 このライブラリの目標は、標準コンテナにないもの、あるいはC++03のコンパイラで最新の標準ドラフ…

土曜日はBoost.勉強会でした!

書くの遅れましたが、^_^; いろんなC++な話に触れて凄く勉強になり、刺激になりました。 とても素敵な勉強会でした。 次もまた行きたい!! 誰が誰だかわからなくておろおろしてたのは内緒です。 スピーカーの皆様、参加された皆様、本当にお疲れ様でした!B…

イテレータを使う時、破壊されないようにしよう

C++でiteratorを使う時にありがちな不可解バグとして「イテレータを走査中にイテレータが破壊される操作を行う事で不可解な挙動を示す」ことがあげられる。 例えばvectorのiteratorを走査中には追加や削除を行ってはいけない。 これはポインタを利用したvect…

クラスをSTLコンテナにいれると恐ろしい事が起こるぞ!

C++に慣れている人にとっては考えもつかないことですが、 クラスをコンテナにいれる、ということを試したくなる時期があります。 コンテナにクラスのポインタをいれるとポインタ管理が面倒だし、 クラスの実体をいれておいたら便利じゃない? というのがその…

VC6.0よりも最新のC++コンパイラでC++を書くと良い8の理由と、悪いほうの8つの理由(大嘘)

元ネタ:C++ よりも C# よりも Java でゲームを作ると良い 8 の理由と、悪いほうの 8 つの理由 (大嘘) - ぐるぐる〜1.STL が便利 VC6はメンバ関数テンプレートが実装されていなかったVC4~VC5までの呪いを受けているのでSTLが変。 VC6.0で既にメンバ関数テン…