タグ

ブックマーク / nyaruru.hatenablog.com (7)

  • 全てが式になる,全てが木になる,全てが式木になる - NyaRuRuが地球にいたころ

    関数型プログラマはプログラムを木だと思ってるらしい,より もいっこ yhara くんのところから. 関数型プログラマはプログラムを木だと思ってるらしい gauche.nightで出た話題だけど、関数型プログラマはプログラムを木だと思ってるらしい。 (car (string-split (string-reverse (string-upcase str)) "\n")) うん、これは木だ。 head $ lines $ reverse $ upcase str Haskellだと $ があるから見た目はネストしてないけど、実際には関数に関数の返り値を渡している。 そう、関数型プログラマは関数呼び出しの中に関数を書くことに抵抗がない。でもC言語とかだとさ、関数呼び出しの中に関数って書かないじゃん、普通。すごく短いやつを除けば、だいたい一旦変数に代入するでしょ。 そのへんの違いが関数型言語を学

    全てが式になる,全てが木になる,全てが式木になる - NyaRuRuが地球にいたころ
  • C++ におけるコードレビューの重要性と活用 - NyaRuRuが地球にいたころ

    そのような場合 C++ では、この関数 g の仮引数 obj に対して const 修飾を行うことで「私 g は obj の参照先の値に対して破壊的な操作を行いませんよ」という宣言を関数 g にさせることができます。 void g(const LargeObj& obj){ ... } void f(){ LargeObj tmp; g(tmp); // tmp に対する変更はない ..... // tmp に対する何らかの処理(安心です!) } やりましたね! C++ のコードにこの種のコメントを残すのは,コードレビュアーの仕事を増やすお手軽な方法のひとつです. 悪性の const_cast や mutable が問題なのではありません.同僚が悪性の const_cast や mutable をコードに紛れ込ませるようであれば,それは採用プロセスの問題です. より現実的な問題は,cons

    C++ におけるコードレビューの重要性と活用 - NyaRuRuが地球にいたころ
  • 別スレッドでリソースを解放することのあれそれ - NyaRuRuが地球にいたころ

    Boost.SmartPtr:shared_ptr + weak_ptr(Cryolite) の 24 分目あたり. shared_ptr<void> による遅延解放 vector<shared_ptr<void *> > to_be_disposed; shared_ptr<HeavyToDispose1> px(…); shared_ptr<HeavyToDispose2> py(…); … // ここで削除して処理が止まると困る… to_be_disposed.push_back(px); px.reset(); to_be_disposed.push_back(py); py.reset(); … // 適当なタイミング or 別スレッドで // to_be_disposed.clear() を実行 の部分に関して, 別のスレッドでのリソース解放は,スレッド親和性をもつリソースを破

  • 続 C++ の const の問題点 - NyaRuRuが地球にいたころ

    C++ の const の問題点 - NyaRuRuの日記 の続き. const 記憶域に配置されたオブジェクトのコンストラクタ内から,非 const なポインタを取り出せそうにみえる.こんなのも合法なんだろうか.C++ むずい. (追記) Unspecified らしい.kinaba さんに教えてもらった.文末にも追記. class X { public: X(X **ptr) { *ptr = this; } private: int dummy_; }; X* xptr = NULL; const X x(&xptr); 他の例.const メンバ関数の中で,メンバから読み出した値を使って環境を書き換えたら,その結果として自分自身が書き換わるようなケース.C++ むずい. #include <iostream> class Hauhau { public: Hauhau() : ag

    続 C++ の const の問題点 - NyaRuRuが地球にいたころ
  • C++ の const の問題点 - NyaRuRuが地球にいたころ

    バグというのは、意図しないところで状態が変更されることにより発生することが多く、 C++のconstメンバ関数は、メンバの状態が変更されないことを保証する、という強力なチェックを 提供してくれるので、mutableとconst_castという例外を除いてメンバの状態変更によるバグは起こりえません。 constメンバ関数はとても強力なので、const操作な関数には常にconst付けてほしいです。 というか、付けてくれないと当に困るので付けてください。const付けてください。 C++ で const メンバ関数にすべきところで const になってないと当に迷惑ってのは同意. ただ,const T なオブジェクトを直接触れるときはいいんだけど,現実問題として const T* とか const T& で引き渡されてくることが結構あって,その場合は const メンバ関数だろうがそうじゃな

    C++ の const の問題点 - NyaRuRuが地球にいたころ
  • 構造体とクラスの使い分け - NyaRuRuが地球にいたころ

    @IT 会議室ネタ.内容は GC 絡み. 構造体とクラスの選択 - @IT Insider.NET 会議室 回答に妙に気になる内容がたくさんあったので少しだけ書いてみます.アカウント無いので. あと,同じサイトで以前こんな記事を書いているので,よろしければどうぞ的な. 連載 .NETWindows Vistaへ広がるDirectXの世界 第6回 .NETアプリを軽快にするためのガベージ・コレクション講座 ひとくちに GC 対策といっても色々あって,たとえば以下の 2 つは別物です. GC の発生頻度そのものを抑えるために, GC ヒープからのアロケーションを避けること GC 発生時の停止時間を短くするために,「生きているオブジェクト」の個数を少なく保つこと ボクシングを減らすのは前者,値型だけで構成された構造体の配列を活用するのは後者に有用です. んで各論. ひろしさんの書き込み (20

    構造体とクラスの使い分け - NyaRuRuが地球にいたころ
  • Chromium (Chrome) のソースを読む - NyaRuRuが地球にいたころ

    Chromium (Chrome) のソースを読んでみた. まず Chromium の位置づけがややこしい. Google 発のオープンソースなブラウザである Chromium があって,Google Chrome はこれをカスタムビルドしたもの,という位置付けらしい.まあ大多数の人間にとっては,Google Chrome のソースを読めるという認識で問題ないんだろう. ソースをダウンロードしてビルドまで,の手順はここにまとまっている. Getting Started - Chromium Developer Documentation 推奨ビルド環境は Visual C++ 2005 SP1.ソリューションファイル同梱なので,Windows っ子も安心. 巨大な tar ファイルの展開が終わると,Visual C++プロジェクトファイルが大量に現れる.各プロジェクトの概要はこちら. G

    Chromium (Chrome) のソースを読む - NyaRuRuが地球にいたころ
  • 1