型記述子ごとの Cheney Copying ゴミ集め (その 2)

C99

ペア・オブジェクトやベクタ・オブジェクトのようにヒープ空間に割り当てるオブジェクトの最小単位のことを LISP の慣例にならってセルと呼ぶことにします。 セルはゴミ集めの処理単位です。 コピー方式のゴミ集め Cheney Copy 算法では、 移動元 from 空間…

型記述子ごとの Cheney Copying ゴミ集め

C99

Chibi Scheme のセルは型識別子をタグとするバリアントになっています。 ゴミ集めのマーク・フェーズでセルの子供セルのありかと個数を型識別子に対する型記述子から求めて、 マークを進めていきます。 この型記述子もセルであって、 context バリアントから…

Heckel 法による diff プログラム

C99

Kernighan, Plauger, Software Tools (1976) の第三章のお題は「ファイルの比較」で始まります。行単位で最初に異なる行を出力する原始的な比較プログラムを説明した上で問題 3-4 に太字で難問と強調した上で、現在の diff プログラムのような使い物になる方…

wchar な translit コマンド

C99

POSIX の tr(1) コマンド に相当するのが Software Tools の translit です。これは tr(1) とは異なる使い方になっていて、-c、-s、-d コマンドライン・オプションがありません。-c は先頭が ^ 文字かどうかで判定し、置換元と置換先の大きさを比べて自動的…

wchar な echo

C99

wchar な Software Tools 遊びの続きです。wordcount と detab では、標準入力からやってきたマルチバイト文字列を getwchar (3) が裏方を使ってワイド文字へ変換し、ワイド文字は putwchar (3) でマルチバイト文字列へ変換がおこなわれて標準出力へ出ていき…

wchar な copy、wordcount と detab

C99

古典的名著、Kernighan、Plauger、Software Tools (1976) は、ちょっとしたものから大掛かりなものまで、テキスト処理のコーディング事例が詰まっています。それらを元にして Ubuntu Linux での GNU libc を用いた wchar コーディングを試してみます。ところ…

Unicode の East Asian Width による文字幅チェック

キャラクタ端末で文字の表示幅を求めるには Unicode の文字プロパティ East Asian Width をチェックして、プロパティが F と W は全角、A は使っているフォント次第で全角か半角、それ以外は半角とします。⇒ http://www.unicode.org/reports/tr11/Unicode Ch…

UTF-8 デコード用オーバーラップ読み込みバッファの試み

R7RS Scheme の入出力では、read_char で入力ポートから UTF-8 をデコードし、Unicode のコードポイントを返す必要があります。入力ポートをバッファリングするとして、UTF-8 シーケンスがバッファの末尾と次に読み込む範囲にまたがっている場合がありえます…

簡易 XPM デコーダ

ASCII 文字列で画像を記述する X-Window Pixel Map (XPM3) 書式を使うと、C 言語のソースコードに画像を埋め込んで、テキスト・エディタで編集できるので便利です。Simple DirectMedia Layer (SDL) では補助ライブラリの SDL_image を使うと、C 言語の配列を…

ブロック崩しゲーム

フーリエ乗算のコーディングばかりだと肩が凝るので、たまには気楽な題材をということで、懐かしのブロック崩しゲームを、ビデオゲーム用のライブラリ SDL (Simple DirectMedia Layer) を使って書いてみました。元祖ブロック崩しゲームである Atari 社の Bre…

Schönhage-Strassen のフーリエ乗算

C99

昨日の非フェルマー数 Ruby 版を C99 に直訳して、カラツバ乗算との速度比較をおこなってみました。C99 版のソースコードは長いので、GIST に置いておきます。gettimeofday(2) と lrand48(3) を使っているため、Linux か BSD でコンパイルと実行することを前…