<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Communication</title><link>http://blogs.wankuma.com/hirase/category/1667.aspx</link><description>Communication</description><managingEditor>T.Hirase</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>T.Hirase</dc:creator><title>[C++] new &amp; delete 血の掟</title><link>http://blogs.wankuma.com/hirase/archive/2009/08/30/180648.aspx</link><pubDate>Sun, 30 Aug 2009 01:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2009/08/30/180648.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/180648.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2009/08/30/180648.aspx#Feedback</comments><slash:comments>1396</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/180648.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/180648.aspx</trackback:ping><description>&lt;p&gt;今日のって、もう昨日の横浜勉強会から時既に12時間ほどが経過していますが、忘れないうちにεπιστημηさんのセッションで出てきたnew / delete 血の掟を簡単にまとめておきます。最後のケース６は、勝手に追加。やっちゃダメですよね？？&lt;/p&gt;
&lt;pre class="c" xml:space="preserve" name="sourceCode"&gt;class Hoge { public: void func(){} };

int main()
{
	{ // 正しい new/delete の使い方
		Hoge* p = new Hoge();
		p-&gt;func();
		delete p;
	}
	
	{ // 正しい new[]/delete[] の使い方
		Hoge* p = new Hoge[10];
		p[0].func();
		delete[] p;
	}
	
	{ // 間違いケース１：お別れの挨拶を
		Hoge* p = new Hoge();
		p-&gt;func();
	}
	
	{ // 間違いケース２：なりすましに注意
		Hoge* p = new Hoge();
		p-&gt;func();
		p = new Hoge();
		p-&gt;func();
		delete p;
	}
	
	{ // 間違いケース３：お別れし過ぎ
		Hoge* p = new Hoge();
		p-&gt;func();
		delete p;
		// ... いろいろあって ...
		delete p;
	}
	
	{ // 間違いケース４：未練を残すな
		Hoge* p = new Hoge();
		delete p;
		p-&gt;func();
	}
	
	{ // 間違いケース５：強欲
		Hoge* p = new Hoge[10];
		p[10].func();
		delete[] p;
	}
	
	{ // 間違いケース６：すべて清算せよ
		Hoge* p = new Hoge[10];
		delete p;
	}
	
	return 0;
}
&lt;/pre&gt;
&lt;p&gt;間違えたときは、核ミサイルが発射され、家賃の振込が物凄い額で振り込まれ、消したはずの恥ずかしいアレが消えなかったり、いやむしろ、まぁくんのお母さんに見つかる場所に自動で移動したり、もう何が起きても不思議ではありません。えぇ、ですから、掟をやぶったら、何がオキテもしょうがありません。えぇ、仕様がありませんから。&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/180648.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>T.Hirase</dc:creator><title>おやじデイ</title><link>http://blogs.wankuma.com/hirase/archive/2009/08/29/180632.aspx</link><pubDate>Sat, 29 Aug 2009 22:13:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2009/08/29/180632.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/180632.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2009/08/29/180632.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/180632.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/180632.aspx</trackback:ping><description>&lt;p&gt;おやじデイ、というわけで、Gears of War 2 バリにイカすオヤジさんたちがスピーカーのわんくま横浜勉強会に初乗り込みしてきました（←乗り込んだのは私ですよ。）。スピーカーの皆さん、スタッフの皆さんお疲れさまでした。カンパは気持ち程度しかできませんでしたけど、また横浜で勉強会＆お食事会があれば参加します・・・・って、年１回になりそう。。&lt;/p&gt;
&lt;p&gt;さっそく、うちに帰って、COMCOMとかOLEOLEしようとか思ったのですが、、、、、うち、メインマシンMacだった・・・・。や、Vistaマシンもあるにはあるんですが、最近起動してない・・・・。や、会社じゃちゃんとXP使って仕事してるんですけど、、うちMac。昨日発売されたばかりのSnowLeopard堪能中でした・・・・・。や、VirtualBoxすりゃいいんですけどね。や、XPのディスクどこいったんだっけ。。。&lt;/p&gt;
&lt;p&gt;ま、今流行のまあくんを堪能でもしておきますか。Objective-Cで。&lt;/p&gt;
&lt;p&gt;や、今日は、それより、Ninety Nine Nightsを完全実績解除するぞ。&lt;/p&gt;
&lt;p&gt;thanks!&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/180632.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>T.Hirase</dc:creator><title>[C/C++/CLI/C#] 二値Enum型を作りたい。 </title><link>http://blogs.wankuma.com/hirase/archive/2009/07/30/179566.aspx</link><pubDate>Thu, 30 Jul 2009 23:39:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2009/07/30/179566.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/179566.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2009/07/30/179566.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/179566.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/179566.aspx</trackback:ping><description>&lt;p&gt;うすたー：&lt;a href="http://blogs.wankuma.com/hirase/archive/2009/07/17/177879.aspx"&gt;[C#] Enumを二値扱いたかったりする。&lt;/a&gt;&lt;p&gt;
&lt;p&gt;うすたー：&lt;a href="http://blogs.wankuma.com/rti/archive/2009/07/27/179358.aspx"&gt;Enum で bool 型を使いたい時って？&lt;/a&gt; (R.Tanaka.Ichiro's Blog)&lt;p&gt;
&lt;p&gt;前回の記事があまりにひどいできだったので、やり直します。&lt;/p&gt;
&lt;h3&gt;戻り値はtrue/falseでいいですか？&lt;/h3&gt;
&lt;p&gt;たとえば、データの書き込み関数「&lt;code&gt;TryWritingBytes&lt;/code&gt;」を考えます。バッファリングやハードウェアの都合上、書き込みには失敗する可能性があります。&lt;/p&gt;
&lt;p&gt;以下に、&lt;code&gt;TryWritingBytes&lt;/code&gt;関数の使用例を示します。同関数の実装は省略。&lt;/p&gt;
&lt;pre class="c" xml:space="preserve" name="sourceCode"&gt;extern bool TryWritingBytes(void * data, size_t size);

int main()
{
	// something to do.
	
	if (TryWritingBytes(data, size)) {
		// 成功時の処理
	} else {
		// 失敗時の処理
	}
	
	// something to do.
}
&lt;/pre&gt;
&lt;p&gt;この&lt;code&gt;TryWritingBytes&lt;/code&gt;の戻り値は、書き込み成功時に&lt;code&gt;true&lt;/code&gt;を返す仕様になります。が、こういう「成功=Trueだな」みたいに、経験十分プログラマ的な感覚で決められた関数って、危ういと思います。みんながみんな経験十分プログラマとは限らないからです。&lt;/p&gt;
&lt;h3&gt;成功不成功という値を作るべし。&lt;/h3&gt;
&lt;p&gt;そんなわけで、trueがどっちを表すかなんて、不毛な議論やコメントを書くくらいなら、さっさと別の二値型を作って、読む人も書く人も間違えないようにすべきです。&lt;/p&gt;
&lt;p&gt;そんなこんなで、このコード：&lt;/p&gt;
&lt;pre class="c" xml:space="preserve" name="sourceCode"&gt;enum IsSuccess : bool {
	Success,
	Failed
};

extern IsSuccess TryWritingBytes(void * data, size_t size);

int main()
{
	// something to do.
	
	if (TryWritingBytes(data, size) == Success) {
		// 成功時の処理
	} else {	// Failed
		// 失敗時の処理
	}
	
	// something to do.
}
&lt;/pre&gt;
&lt;p&gt;こんな言語仕様あった方がいいと思いません？&lt;/p&gt;
&lt;h3&gt;補足&lt;/h3&gt;
&lt;p&gt;先の記事で、私、「true/falseを別名で扱いたいだけです」と書いていますが、考え直したところ、全然ダメです。true/falseを別名で扱うこともやはり手段であって、目的ではないですし、仮にできたとしても、所詮別名、成功不成功を表す別名にtrue/falseを代入できてしまいますから。&lt;/p&gt;
&lt;p&gt;なので、やっぱり、二値Enum。&lt;/p&gt;
&lt;p&gt;また先の記事のコメントやトラックバックで、いくつか代替方法をいただきましたが、やはり私を含む経験不足プログラマが見てもわかりやすい方式（二値Enumに限らず）が言語仕様に組み込まれる方が良いと思います。&lt;/p&gt;
&lt;p&gt;ちなみに、別に今回の二値Enumがベストな解だとは思っていません。&lt;/p&gt;
&lt;p&gt;あとあと、最後に。他にも言語仕様に不満ってありません？　っていうか何でテキストエディタなんだよ？　とか。クラスのメソッドを編集するのに、どのファイルを開けばいいかなんて、覚えるのなんて意味ないよ？　とか。もっと自由にやらせろ、的な。&lt;/p&gt;

&lt;h3&gt;追記＠2009-07-30T23:40&lt;/h3&gt;
&lt;p&gt;Success/False以外の例をいくつか。&lt;/p&gt;
&lt;pre class="c" xml:space="preserve" name="sourceCode"&gt;
enum OpenClose : bool { Open, Close };
OpenClose CheckOpenClose();
OpenClose OpenTray();

enum YesNo : bool { Yes, No };
YesNo CheckResponse();
YesNo WaitResponse();

enum GoodBad : bool { Good, Bad };
GoodBad CheckFile(const char * file_name);

enum MaleFemale : bool { Male, Female };
MaleFemale CheckSexuality();
&lt;/pre&gt;
&lt;p&gt;などなど&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/179566.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>T.Hirase</dc:creator><title>学生時代に学んでおきたいこと</title><link>http://blogs.wankuma.com/hirase/archive/2009/07/08/177208.aspx</link><pubDate>Wed, 08 Jul 2009 01:45:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2009/07/08/177208.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/177208.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2009/07/08/177208.aspx#Feedback</comments><slash:comments>167</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/177208.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/177208.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://gihyo.jp/magazine/wdpress/archive/2009/vol51/"&gt;WEB+DB PRESS vol.51&lt;/a&gt;で約４０ページにわたって、「巧いメソッド設計」という特集がくんであります。&lt;/p&gt;
&lt;p&gt;中身を見なくても、職業プログラマや、自分で開発してメンテナンスしたことがある人なら納得の内容ばかりです。&lt;/p&gt;
&lt;blockquote cite="http://gihyo.jp/magazine/wdpress/archive/2009/vol51/"&gt;
&lt;ul&gt;
&lt;li&gt;第1章：品質を実現する“巧い”プログラミング&lt;br /&gt;
	プログラミングこそ，真の設計&lt;/li&gt;
&lt;li&gt;第2章：クラス設計／パブリックメソッド設計の考え方&lt;br /&gt;
	処理分担をどう実現するか&lt;/li&gt;
&lt;li&gt;第3章：プログラムの意図を読み手にいかに伝えるか&lt;br /&gt;
	コメント，ネーミング，コーディング標準&lt;/li&gt;
&lt;li&gt;第4章：メソッド構造化の実践知識&lt;br /&gt;
	実装者が心得ておくべき品質向上のための手法&lt;/li&gt;
&lt;li&gt;第5章：メソッドの副作用を考える&lt;br /&gt;
	同じ引数で呼び出しても結果が違うメソッドの扱い方&lt;/li&gt;
&lt;li&gt;第6章：メソッドのエラー処理を考える&lt;br /&gt;
	「契約による設計」を使った潜在的バグへの対処&lt;/li&gt;
&lt;li&gt;第7章：Javadocをコード品質の向上に活用しよう&lt;br /&gt;
	ドキュメントツールJavadoc再入門&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;大学のとき、こういう授業ってなかったなぁと思います。またデバッグの授業とかもあればいいなと思います。&lt;/p&gt;
&lt;p&gt;どうやってバグを回避するか、バグが出たときにどう対処するか、それを学生さんに学んでほしいです。というか、自分が学びたかったです。&lt;/p&gt;
&lt;p&gt;学問としての面白みは皆無なような気も、のめり込めば、楽し過ぎる気もしますが、職業プログラマとしては必要なことなので、きっちり学んでから就職したいものです。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/177208.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>T.Hirase</dc:creator><title>漸化式とプログラムループ</title><link>http://blogs.wankuma.com/hirase/archive/2009/05/28/173718.aspx</link><pubDate>Thu, 28 May 2009 02:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2009/05/28/173718.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/173718.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2009/05/28/173718.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/173718.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/173718.aspx</trackback:ping><description>&lt;p&gt;すべての漸化式の一般項が存在するならば、すべてのプログラムループは、１ループ単位でを並列実行できる・・・・・、とかなんとか。&lt;/p&gt;
&lt;p&gt;プログラムのループって、１回１回のループが別のループに依存していなければ、当然並列実行できると思う。たとえば、１回目のループと２回目のループは単にループ回数を利用して、特定の計算をしているだけ・・・とか。（ようわ、for文のiにだけ依存しているってこと。）&lt;/p&gt;
&lt;p&gt;で、別に他のループに依存していたら並列実行できないのかって考えた結果、その依存性を排除できれば並列実行できるわけなんだから、後は依存性を如何に排除すべきかって考えた。&lt;/p&gt;
&lt;p&gt;そうしたときに、ふと漸化式が舞い降りた。漸化式って、前後の値に依存するけど、一般項を求められる。これってつまり、前後の値への依存性を排除できているってこと。ということは、何だ。プログラムのループだって依存性を排除できるじゃない。&lt;/p&gt;
&lt;p&gt;って、夢うつつに思う。&lt;/p&gt;
&lt;p&gt;いや、まぁ、ハードウェア資源的な問題もあるけど、計算だけなら大丈夫・・・？&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/173718.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>T.Hirase</dc:creator><title>[NEWS] Visual Studio 2008 Professional が 68,000 円也。</title><link>http://blogs.wankuma.com/hirase/archive/2009/02/03/167343.aspx</link><pubDate>Tue, 03 Feb 2009 10:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2009/02/03/167343.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/167343.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2009/02/03/167343.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/167343.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/167343.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://www.microsoft.com/japan/vstudio/express/anniversary.aspx"&gt;Visual Studio 2008 発売 1 周年記念 | アップグレード パッケージ対象拡張&lt;/a&gt;ということで、2009 年 2 月 2 日より、Express Edition → Professional のアップグレードが可能になり、Professional が実質 68,000 円で購入できるようになりました。&lt;/p&gt;
&lt;p&gt;自宅では Express Edition で十分だとか思ってましたが、少々考え中。もう一声って感じもします。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/167343.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>T.Hirase</dc:creator><title>[Visual Studio] 効率よくコピペする。</title><link>http://blogs.wankuma.com/hirase/archive/2009/01/28/166986.aspx</link><pubDate>Wed, 28 Jan 2009 09:49:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2009/01/28/166986.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/166986.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2009/01/28/166986.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/166986.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/166986.aspx</trackback:ping><description>&lt;p&gt;@IT の「&lt;a href="http://www.atmarkit.co.jp/fdotnet/dotnettips/159vscopy/vscopy.html"&gt;VS.NETでコードを効率よくコピー＆ペーストするには？&lt;/a&gt;」以外で知っている方法を列挙します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「CTRL + Click」で単語or数値選択&lt;/li&gt;
&lt;li&gt;ダブルクリックで単語or数値選択&lt;/li&gt;
&lt;li&gt;選択範囲をマウス&lt;strong&gt;右&lt;/strong&gt;ボタンでドラッグすると、「移動」または「コピー」が簡易にできる。&lt;/li&gt;
&lt;li&gt;選択範囲をマウスでドラッグして、「ツールボックス」にドロップすると、クリップボードリング的に使える。&lt;/li&gt;
&lt;li&gt;ブロック選択は、キーボードだけでも行える（Alt+Shift+↑、→等）&lt;/li&gt;
&lt;/ul&gt;

&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/166986.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>T.Hirase</dc:creator><title>[C#] ジェネリック＋型情報で頑張る「文字列→値」変換</title><link>http://blogs.wankuma.com/hirase/archive/2009/01/23/166655.aspx</link><pubDate>Fri, 23 Jan 2009 10:20:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2009/01/23/166655.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/166655.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2009/01/23/166655.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/166655.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/166655.aspx</trackback:ping><description>&lt;p&gt;Ｒ・田中一郎さんの「&lt;a href="http://blogs.wankuma.com/rti/archive/2009/01/22/166614.aspx"&gt;またジェネリックで挫折&lt;/a&gt;」しないように、ジェネリック＋型情報で頑張る日記。&lt;/p&gt;
&lt;pre class="csharp" xml:space="preserve" name="sourceCode"&gt;namespace Sample
{
    using System;
    using System.ComponentModel;
    using System.Diagnostics;

    static class Program
    {
        static void Main(string[] args)
        {
            var value = ToNumeric&amp;lt;Decimal&amp;gt;("10.2");
            Console.WriteLine(value);
        }

        static public T ToNumeric&amp;lt;T&amp;gt;(string value)
        {
            if (value == null) return default(T);

            if (String.IsNullOrEmpty(value)) return default(T);

            try
            {
                var converter = GetNumericConverter&amp;lt;T&amp;gt;();
                if (converter != null &amp;&amp; converter.CanConvertFrom(typeof(String)))
                {
                    return (T)converter.ConvertFromString(value);
                }
            }
            catch (Exception e)  // Exception を捕りたくないんだけど、他に方法がない。
            {
                Debug.WriteLine(e.Message);
            }
            return default(T);
        }

        static BaseNumberConverter GetNumericConverter&amp;lt;T&amp;gt;()
        {
            Type typeInfo = typeof(T);

            if (typeInfo == typeof(Byte)) return new ByteConverter();
            if (typeInfo == typeof(Decimal)) return new DecimalConverter();
            if (typeInfo == typeof(Double)) return new DoubleConverter();
            if (typeInfo == typeof(Int16)) return new Int16Converter();
            if (typeInfo == typeof(Int32)) return new Int32Converter();
            if (typeInfo == typeof(Int64)) return new Int64Converter();
            if (typeInfo == typeof(SByte)) return new SByteConverter();
            if (typeInfo == typeof(Single)) return new SingleConverter();
            if (typeInfo == typeof(UInt16)) return new UInt32Converter();
            if (typeInfo == typeof(UInt32)) return new UInt32Converter();
            if (typeInfo == typeof(UInt64)) return new UInt32Converter();

            return null;
        }
    }
}&lt;/pre&gt;

&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/166655.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>T.Hirase</dc:creator><title>[雑記] Google Chrome の応答性へのこだわり</title><link>http://blogs.wankuma.com/hirase/archive/2008/12/24/164835.aspx</link><pubDate>Wed, 24 Dec 2008 08:41:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2008/12/24/164835.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/164835.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2008/12/24/164835.aspx#Feedback</comments><slash:comments>30</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/164835.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/164835.aspx</trackback:ping><description>&lt;p&gt;@IT に「&lt;a href="http://www.atmarkit.co.jp/news/analysis/200812/22/chrome.html"&gt;Chromeはなぜ速いのか&lt;/a&gt;」という記事が出ています。インターネット ブラウザを作る上だけではないノウハウが満載なので、簡単にまとめておきます。→そんなことない？&lt;/p&gt;
&lt;h4&gt;Google Chrome の応答性へのこだわり&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;プロセスは、大きく3種類のプロセスを生成する。
  &lt;ol&gt;&lt;li&gt;ユーザー インタフェース&lt;/li&gt;&lt;li&gt;レンダリング&lt;/li&gt;&lt;li&gt;プラグイン&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;起動プロセスは、できるだけ簡潔に行う。
  &lt;ol&gt;&lt;li&gt;最初に読み込んでいるのは、chrome.exe と chrome.dll、設定ファイルだけ。ページのレンダリングに必要なモジュールやその他もろもろは後から非同期に読み込む。驚くべきことに、ネットワーク関連のモジュールさえも読み込んでいない。&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;ユーザーがアクセスするプロセスからのディスク I/O は一切禁止。
  &lt;ul&gt;&lt;li&gt;「名前を付けて保存」さえも別プロセス。&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;子ウィンドウを作らせない。
  &lt;ul&gt;&lt;li&gt;子ウィンドウがあると、Windows メッセージの仕組み上、どこかのウィンドウで処理がもたつくと、全体の応答性が低下してしまう。&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;レンダリング プロセスは本体ウィンドウへの描画を間接的に行う。
  &lt;ul&gt;&lt;li&gt;いったん裏画面へ描画し、表画面へ転送する（もちろん必要に応じて、だと思う）。&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Chrome ブラウザは、フィッシングサイト対策のために URL リストを保持するが、URL そのものではなく、SHA-256 値を持っている。
  &lt;ul&gt;&lt;li&gt;しかも、SHA-256 値は、256 bit のうち先頭の 32 bit だけである（32bit がヒットしたら、Google のサーバーから本当に疑わしい URL なのかを確認しにいく）。&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;URL → IP アドレスへの変換（DNSによる名前解決）をユーザーからの命令（クリックなど）が来るまでもなくやってしまう（AJAX的だ）。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;応答性へこだわる理由&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;当初のわれわれのGoogle Chromeの目標は、このブラウザをできるだけ速くすることだった。しかし、生の速度（raw speed）に加えて高い応答性を持つようにしたかった。結局のところ、ページがいくら速くロードできたって、ユーザーインターフェイスが固まったら意味がないんだから！ (But in addition to raw speed, we wanted it to be highly responsive. After all, it doesn't matter how fast pages can be loaded if the user interface is locked up!)&lt;/li&gt;
&lt;li&gt;0.5秒の遅延でユーザー離れしてしまう。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;その他&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;ユーザーをないがしろにしないこと (not to maltreat users)&lt;/li&gt;
&lt;li&gt;裏でできる限りのことをやろう&lt;/li&gt;
&lt;li&gt;コード変更のたびに、「自動ビルド→自動テスト→自動パフォーマンス計測」され、パフォーマンスが悪くなるようなコード変更は許さない。&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上&lt;/p&gt;

&lt;h4&gt;追記＠2008-12-24T08:53&lt;/h4&gt;
&lt;p&gt;そういや最近、自分が書く GUI のツールは、「コンソール呼び出し」が多くなってきました。コンソール呼び出しの場合、UI スレッドとは完全に分離されているので応答性が良いですし、結構 Chrome さんに似ている感じになっています。ま、でも呼び出す先のプロセスはひとつのコンソールなんで、Chrome さんのように、レンダリングプロセス、プラグインプロセスのようにヘテロジニアスな感じではないですが。ま、似てますね。&lt;/p&gt;

&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/164835.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>T.Hirase</dc:creator><title>仕事のブログ更新</title><link>http://blogs.wankuma.com/hirase/archive/2008/12/09/163034.aspx</link><pubDate>Tue, 09 Dec 2008 09:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/hirase/archive/2008/12/09/163034.aspx</guid><wfw:comment>http://blogs.wankuma.com/hirase/comments/163034.aspx</wfw:comment><comments>http://blogs.wankuma.com/hirase/archive/2008/12/09/163034.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/hirase/comments/commentRss/163034.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/hirase/services/trackbacks/163034.aspx</trackback:ping><description>&lt;p&gt;こんなの書きました↓&lt;/p&gt;
&lt;p&gt;CRIチャンネル「&lt;a href="http://ch.cri-mw.co.jp/hirase/52620.html"&gt;ミドルウェアにしてミドルウェアにあらず。&lt;/a&gt;」。&lt;/p&gt;
&lt;p&gt;よろしくどうぞ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/hirase/aggbug/163034.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>