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

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>…

C言語でCurrying2

http://d.hatena.ne.jp/shinichiro_h/20060119の手法は引数を積みなおして関数ポインタを呼ぶというもの(だと思う)。 call cを呼んだ直後のスタック …… 100 ret(c) call addを呼んだ直後のスタック …… 100 ret(c) 100 10 ret(add) という感じで。これをtail …

C言語で継続2

http://d.hatena.ne.jp/kilrey/20090921#p1で作成した継続は本当に「スタックを巻き戻す」ことしかできない。例えば、外部リソースを再利用できない、といった問題がある。 外部リソースを再利用できない。 下のソースコードでf1()で記録した継続をf2()で巻…

C言語で継続

C言語で継続を実装できるかを考えてみた。もちろん、生のC言語でできるわけがないのだけど、環境を制限すればできないこともない。 前提、setjmp()とlongjmp()について。 setjmp()とlongjmp()の用途はあくまでも大域脱出である。そのため、setjmp()を呼び出…

C言語で多値返却

ちょっと古いけどhttp://d.hatena.ne.jp/yuyarin/20090825/1251136545の話。 C標準では。 C言語の仕様レベルでは多値返却にもっとも近いのは構造体の値返却だ。複数の値を返すという用途は充分に満たしている。 struct int_int_t { int x; int y; }; struct …

ダメなものはダメ

http://www.kt.rim.or.jp/%7ekbk/zakkicho/09/zakkicho0909b.html#D20090916-2の話。 exploitable な情報の格納を効果的でない (ineffective) 暗号化 (コンパイルしたパスワードをプログラムに埋め込んだ symmetric ciphers、trivial なパスワード、すべての…

再始動しているなあ

変愚蛮怒SVNが再始動したとの噂を溜まり場で見ていて思ったが、ソースコード閲覧所も1.7.1,2に追随するべきだろうか。1.7.0も安定版というわけでもないわけだし、追いかけて支障はないと思う。 SVNと連動させてupdate→生成→uploadとできると良いよね。

「(正しく)動けば良い」

「動けば良い」と言う人はエラーが起きてから「動かないじゃないか」と文句を言う。仮令、その人の操作が間違っていたとしても言う。ある「動けば良い」と言う人が酷いバグで右往左往しているのを見て(少なくともその人の)原因に思い当たった。 その人はコー…

意図としてのコメントはこう書く

コードコメントに書くべきは「意図」 - プログラマーの脳みそ、ソースコードの心脳問題 - プログラマーの脳みその話。 初心者のコードでも、意図が書かれているならレビューは容易に行える。意図不明のコードほど手に負えないものはない。 「コメントとして…

問題はエンコーディングではないのだ。

http://itpro.nikkeibp.co.jp/article/COLUMN/20090208/324377/?ST=security&P=1からhttp://d.hatena.ne.jp/tohokuaiki/20090910/encodingの話。 ベースライン。 Webアプリケーション、ここでは一般的な用法として次の条件を満たすもの、の話に限定して進め…

「名は体を表す」とは限らない

名と実の関係は極めて厄介なものだ。全く関係がないということはないものの、どちらがどちらに影響を与えているかも判りにくいし、正の相関であるとも限らない。 完成された何かに対して後から名前を付ける。 この場合は「名は体を表す」ことが多い。という…

今の環境ならコンパイル・アセンブル・リンクを分ける必要はない。

C言語の処理過程を考えると大まかに次のようになっている。 人間の頭 編集 ソースコード パース 抽象構文木 コンパイル アセンブリコード アセンブル オブジェクトコード リンク 実行ファイル OSによる起動 プロセス プロセス実行 出力 これは必ずしも一斉に…

名前推論

http://shinh.skr.jp/m/?date=20090831の話。名前推論は面白い話なだけにひっかかるところも多い。 賛成できない、というか少しひっかかるのは名前推論の話。最初見た時はすごいなー面白いなーと思った記憶がある。 でもいつだったかその話をぼんやり思い出…