2009-05-01から1ヶ月間の記事一覧
MISRA CとかC99といった、C言語の標準化とか、こう書け的なスタイルの話で、非常に多くの議論の蓄積があることを発見しつつある。例えばマクロよりinline関数使えよという議論がある。関数なら型チェックができるとか、返り値が渡せることとか、関数に渡す値…
ビットが並ぶような話だとか低レベルなことを調べ始めたら、ちょっと懐かしくてうれしくなった。一方で、ぼくの頭の中ではやっぱり数値はすべて8ビット。charのポインタでループして何が悪いかに気づいていなかった。今は最低でも4バイト単位で処理するのが…
文字列の長さを調べるのに、charをwhileループで回すか、4バイト単位でスキャンするか(strlen.c)、あるいは386依存の命令を使うか(strlen(3)=推定strlen.s)でどのぐらい速度が違うのか計ってみた。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int</string.h></stdlib.h></stdio.h>…
ソートのときに比較関数が何らかの計算を含む場合、計算に重複が出て処理性能が落ちる。これを避けるために、あらかじめ計算結果と一緒に連想配列のような入れ物を別途用意して並べ直すのが一般的なようだ。1994年にPerlハッカーのランダル・シュワルツがPer…
標準ライブラリのstrlen(3)とか言っても、whileループより速いものって作れるんだろうかと思って、以下のファイルを眺めてみた。 glibc$ find ./ -iname strlen* ./sysdeps/sh/strlen.S ./sysdeps/i386/i486/strlen.S ./sysdeps/i386/i586/strlen.S ./sysdep…
標準ライブラリのqsortの使い方が少し分かったので、文字列の並べ替えもやってみた。 #include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM 10 char str[NUM][16]; void show(void) { int i; for (i = 0; i < NUM; i++) { printf("%s\n",str[i]); } } int cmp (const </time.h></stdlib.h></stdio.h>…
バブルソートには思い出がある。大学生のときにPC-9801で落ちゲーを作った。上から落ちてくるトランプのカードを5×5のマトリックスに積み上げて、縦横斜めでポーカーの役を作る。やりこむと「縦列で数字を揃えようとしても最後で失敗する確率が高くてスコア…
C入門、プログラミング入門として、連結リストの次に基本的なソートをやってみようと少し格闘してみた。単純なint配列とかじゃテキストのままなので、どうせだったら連結リストを並べ変えてみようと思ったのが間違いだった。まず、いちばん簡単なのは隣り合…
RubyはDSL(Domain Specific Language)を定義するプログラミング言語として期待されているという。この方面の権威らしいMartin Fowlerによれば、DSLには長い歴史がある。SQLとかCSSとかMakefileとか、ともかく何らかの目的に特化した記述言語をDSLと呼ぶ。…