2009-01-01から1年間の記事一覧

再開発≠再実装

http://d.hatena.ne.jp/tt_clown/20091228/1261996214、http://d.hatena.ne.jp/monjudoh/20091228/1262023451、http://d.hatena.ne.jp/Isoparametric/20091230/1262134418の話。 態度表明。 先に明言しておくと、私は「再開発はするな。再実装は考えてからし…

エラー握りつぶし

ありがちダメなコードのダメな理由を書くコーナー。 #include <stdlib.h> #include <math.h> #include <stdio.h> int mysqrt(int x) { if (x < 0) { return 0; } else { return (int)sqrt(x); } } int main() { printf("%d\n", mysqrt(4)); printf("%d\n", mysqrt(1)); printf("%d\n", m</stdio.h></math.h></stdlib.h>…

ソートの速度を決める要因についてメモ

思いつく限りの要因をあげてみる。 データ内容 個別比較が必要かどうか 比較にかかる時間 比較の分割性 比較の並列度 データ 要素数 読み込みにかかる時間 読み込みの並列度 交換にかかる時間 交換の並列度 ワーキングメモリ 要素数 再帰段数 読み込みにかか…

期待されない答え

http://d.hatena.ne.jp/skelton_boy/20091217/1261053652の話、というよりhttp://d.hatena.ne.jp/Isoparametric/20091219/1261201890の話。ポータブルに仕様の穴を突く方向で考えてみた。 /* MyTypeの定義 */ typedef int MyType[1]; void set(MyType m, int…

毒魔を育てる

@の溜まり場IIで「毒→妖→地はどう?」と話を振ったのだけど、「ありかもしれないが微妙」というところで終わってしまった。向こうは今更なので続きをここに書く。 毒の特徴は。 利点 毒針は序盤の攻撃魔法では最強だろう。 悪臭の雲は序盤から中盤まで搦め…

RAIIの代用

C++だとRAIIでリソースの後始末ができる。CだとRAIIが使えないが代案を考えてみた。エラーコードが雑なのは気にしないで。 ありがちなもの。 int func(char const* filename) { FILE *fout = fopen(filename, "a+"); if (fout == NULL) { return -1; } fprin…

名前がおかしい。

extern int checkStatus(void);static int status; int checkStatus() { status = !status; return status == 0; }間違っている点は 宣言と定義の返り値が違う。enum型の大きさがintとは限らない。 宣言と定義の仮引数リストが違う。 check〜という名前にも…

「経済学と似ている」というのは未科学ということだからね。

http://www.symmetric.co.jp/hiyama/SoftwareEngineering.htmの話。http://d.hatena.ne.jp/kilrey/20090226#p1とも関連する。 大事なことなので二度引用する。 僕自身は、ソフトウェア工学を、「どうでもいい(したがって、あまり役に 立たない)ソフトウェ…

ざんねん!ピカチュウはよだれをたらしなきわめいている。

http://d.hatena.ne.jp/Longsword/20091130/1259573673の話。 ほとんどの場合、イオナズン一択になってしまうドラクエとは大違いです。 消費MP0の特技がもっとダメ感を強めているなぁ。むしろ山彦イオナズンができるだけマシとすら思う。 資源分配の厳しいゲ…

挿入ソートの話のまとめ

gcc4.3 -O3 on Atom, N=10000の条件で挿入ソートを測った結果(ソースコードは下に)。所要時間(time)を測っただけでは振る舞いが掴めないので、cachegrindでD1キャッシュ読み回数(D1read)を数えてみた。 関数 メモリ time D1read yane0 malloc 9.79 62M wkpd0…

挿入ソートの話の途中経過

Atom/gcc -O3だとループ変数をj=iからj=i-1に変えるといった、本質的ではない変更でも20〜30%の速度変化が起こり得るようだ。これはiccで比較してみた方が良いかもしれない。それらを含めた印象としては Wikipedia版もやね版も最適化がよく効いている場合に…

引数の評価順序。

ありがちダメなコードのダメな理由を書くコーナー。 現象。 #include <stdlib.h> #include <stdio.h> int main() { printf("puts(\"A\"), puts(\"B\"), puts(\"C\")+puts(\"D\") = %d, %d, %d\n", puts("A"), puts("B"), puts("C")+puts("D")); return 0; }をコンパイルして実行</stdio.h></stdlib.h>…

副作用のタイミング

ありがちダメなコードのダメな理由を書くコーナー。 現象。 C99のソースコード(tmp.c) #include <stdlib.h> #include <stdio.h> int main() { int i = 0; printf("(++i) + (++i) = %d\n", (++i) + (++i)); return 0; }をコンパイルして実行すると、 $ gcc -std=c99 -pedantic -O</stdio.h></stdlib.h>…

v8もたらいまわし

http://d.hatena.ne.jp/kilrey/20091111#p2の話。 function tarai (x, y, z) { if (x <= y) { return y; } else { return tarai(tarai(x-1, y, z), tarai(y-1, z, x), tarai(z-1, x, y)); } }; for (var i = 0; i < 0x10; ++i) { (tarai(12, 6, 0)); } print…

マルチスレッドのvolatile

ありがちダメなコードのダメな理由を書くコーナー。 現象。 C99+POSIX(SUSv3)のソースコード(tmp.c) #include <stdlib.h> #include <stdio.h> #include <pthread.h> volatile int count = 0; int const COUNT_PER_THREAD = 0x100000; int const THREAD_NUM = 0x10; void* work(void* arg) {</pthread.h></stdio.h></stdlib.h>…

google golangでたらいまわし

http://golang.org/の話。 とりあえずたらいまわしてみたら、gcc -O3の4倍くらいの所要時間だった。なかなか速い。 package main import "fmt" func tarai(x int, y int, z int) int { if x <= y { return y } else { return tarai(tarai(x-1, y, z), tarai(…

情報漏洩関連

Web

http://slashdot.jp/~GetSet/journal/490564の話。以前、/.-jで読んだものだけれど。 問題のレベルが違う。 拾得者 大人げない。対応する権限がない人に文句を言っても意味がないし、電話後の処置も適切ではないだろう。 クロネコ 情報漏洩事故。罰則規定に…

固定小数点数のフォロー

http://www.kt.rim.or.jp/%7ekbk/zakkicho/09/zakkicho0910c.html#D20091027の話。 Wikipediaだと。 固定小数点数(こていしょうすうてんすう)は、コンピュータにおける実数の近似値の表現方式。固定小数点数では整数部分に用いるビット数と小数部分に用い…

日本語文法では音便や省略が重要

http://d.hatena.ne.jp/kanimaster/20091022/1256217225に書いたブックマークへの追記。 「おいしいです」はやや崩した表現。「おいしゅうございます」の方がより丁寧。選択肢としては「おいしいのです/おいしいんです」も。 「おいしいのです」は書き言葉、…

free_LIST()

http://www.tees.ne.jp/~sin-x/200910a.html#0901 http://shinh.skr.jp/m/?date=20091011#p01 http://www.tees.ne.jp/~sin-x/200910b.html#1201 http://homepage1.nifty.com/herumi/diary/0910.html#12 の話。 作るべきもの。 仕様の話としては リストの先頭…

あるにはあるけど

http://www.kt.rim.or.jp/~kbk/zakkicho/09/zakkicho0910b.html#D20091013-2の話。 一応、インデックスソート(タグソート)というものはある。が、Javaではまったく意味がないし、C言語でもほとんど意味がない。Fortranなら少しは意味があるかも。 要するに…

配列とポインタ

http://d.hatena.ne.jp/heiwaboke/20091012/1255275804の話。 別の場所で教えた内容をちょっと引っ張ってみる。 前提として。 配列とポインタは違う。 アドレスだけではなく、型も考慮するべき。 譬え話ではなく、仕様書を読もう。 具体的には。 #include <stdio.h> #</stdio.h>…

コルシカ

Web

http://d.hatena.ne.jp/mitarashi/20091007の話。 どのように闘うのかには興味があるのだけど、法律の話は避けておいて。 「電子化」の意味。 電子化と一言で片づけてしまっているが、電子化にも色々な形態がある。 画像化 今回のようにスキャンしただけのも…

溜まり場のDCSS

自治って響きは良いけどすぐに混迷する。発言者の同一性を保証しないと議論は難しい。一意性も保証しないと多数決は難しい。管理人が優しい独裁者に徹する方が上手く行くんだよね。 現状認識 DCSSスレはじきに過疎化すると思う。 過疎でもスレは必要だろうね…

メタメッセージ

http://practical-scheme.net/wiliki/wiliki.cgi?Shiroの(2009/10/04 02:02:25 PDT 空気読み会話は日本人の専売特許じゃないよ)より。 その作品を読んだことはないのでもしかすると想像を絶する空気読み会話なのかも しれないけれど、一般的に言えば、会話文…

C言語でCurrying 5

ちょっと休んだけどまだ続くよ。 これまでのまとめ。 呼び出し規約 cdecl 呼び出し側でスタック掃除 stdcall 呼び出され側でスタック掃除 部分適用とは 関数を呼び出す際の引き数を、呼び出し時と事前との二つに分けて与える。問題になるのは 呼び出し側から…

C言語でCurrying 4

Boehm GCと組み合わせた場合の注意点について述べる。 悪い例。 下のような記述ではGC_malloc()で取得したポインタを部分適用したものの、肝心のメモリ領域が回収されてしまう。何故かと言えば、GC_malloc()で取得したポインタがポインタサイズ境界に位置し…

これはイエスマン・テストかも

http://d.hatena.ne.jp/yaneurao/20090927#p1の話。 イエスマン・テストという言葉の説明から。 イエスマン・テストとは 対象の状態に関わらず常にpositive/negativeの一方を返すテスト のことを指す私の造語。 表現の拙さから発生することもあるし、項目数…

C言語でCurrying 3

もっとも簡単な手段がもっとも優れた手段ということがしばしばある。 calleeがスタックを解放する場合 x86=IA32でのstdcall関数の場合、calleeがスタックを解放する。つまり call cを呼んだ直後のスタック …… 100 ret(c) jmp addを呼んだ直後のスタック …… 1…

C言語でCurrying

と思ったら既にあった。http://d.hatena.ne.jp/shinichiro_h/20060119 厳密には。 #include <stdio.h> int test(int i, int j) { return i+j; } static int _i; int test1(int j) { return _i+j; } int (*test2(int i))(int) { _i = i; return test1; }厳密には「int </stdio.h>…