トップ «前の日記(2008-04-06) 最新 次の日記(2008-04-08)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2008-04-07

_ 未初期化ポインタ

たぶん、例のあれは別の関数を使って初期化してるんだよ。

あれだと何が起きているかわかりにくいから、ちゃんとハローワールドにしておいた。

#include 
void foo() {
    int b = 0;
    char* a = "hello world !";
}
void bar() {
    int b = 0;
    char* n;
    printf("%s\n", n);
}
int main(int argc, char* argv[])
{
    foo();
    bar();
    return 0;
}
このプログラムを、まずはVC2008++でコンパイル実行してみよう。
c:\test>cl hello.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
 
hello.c
c:\test\hello.c(11) : warning C4700: 初期化されていないローカル変数 'n' が使用されます
Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.
 
/out:hello.exe
hello.obj
 
c:\test>hello
hello world !
 
c:\test>

何か些細な警告が出ているが、気にする必要はない。常に正しくハローワールドする。嘘だと思ったら試してみれば良い。ソースはあるんだから。

ここでマシンを変える。

Linuxワールドに来たぜ。

arton@monde:~/tmp$ gcc hello.c -o hello
arton@monde:~/tmp$ ./hello
hello wolrd !

もちろん問題なし。警告もなしだ。嘘だと思ったらためしてみよう。ソースはあるのだ。

でも、最適化はやめてくれ。あれはバグバグだ。

arton@monde:~/tmp$ gcc -O hello.c -o hello
arton@monde:~/tmp$ ./hello
Segmentation fault (core dumped)

案の定、ーOを付けたらコアになった。だから、プロダクトモードでは最適化は切るものなんだぜ。


てなことを4月1日に書けば良いのだな(もっとも、4/1用なのは最後の結論だけだけど)。

_ データベースとオブジェクト指向

これは、興味深い指摘だ。

データベース正規化・非正規化

単純さ、理解のしやすさという点でも、テーブルの結合操作というのは、結構嫌われるのですよ。データベースの 正規化 vs 非正規化 というのは、オブジェクト指向でいう、小クラス主義 vs 大クラス主義 に通じるものがあるんじゃないですかね。

違うといえば、RDBの場合結合操作が想定済みなのに対して……(オブジェクトは実装継承以外の結合は想定外と書こうと思ったが、ポインタだのリファレンスがあるわけだから想定外ってこともないな、と思いとどまる)……確かに通じるものがあるなぁ。

_ 結果は同じでも過程が異なる

大クラス主義とか、非正規DBでも、そのほうが良いと考えてユースケースや後先まで想定した結果そうしたのと、分割するという発想がないため結果的にそうなるのでは、生成物は同じでもずいぶん異なる。

これは異なるのか、それとも同じなのか? へたな考え休むに似たりなのか。

おそらく異なる。

少なくとも、生成した人間が次の一手を付け加えるとき、あるいはなんらかの理由で修正をかけるときには、ずいぶんと異なるのではなかろうか。

では、他人がメンテするとしたらどうか?

おそらく等しい(本当に生成物が同じなら)。

でも、経験的には、外部インターフェイスが同じであっても内部インターフェイスは、少なくともプログラムの場合は異なる。

データベース(端的にはテーブルのスキーマ)はどうだろうか? 同じだよなぁ。

そこが異なる。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|

ジェズイットを見習え