A Language-Based Approach to Unifying Events and Threads
を読む。
ふむ。CPS で書かせてるだけか。にもかかわらずそれを thread と表現してはばからないのは、Haskell の do の強力さか。
まぁ、十分に進化したイベントドリブンスタイルはスレッドと見分けがつかない、ということかもしれない。まだそこまで到達していないにしても。
そういえば、OpenBSD 3.9 での変更点に、hash を red-black tree に変えたというのが 2つ入っている。
これはやはり最悪計算量を嫌ったのだろうか。
さて、using, last_using の初期化の次は base_water_thread を次のように初期化している。
diffutils-2.8.1/src/diff3.c:602-608
602: if (!current[0]) 603: base_water_thread = 1; 604: else if (!current[1]) 605: base_water_thread = 0; 606: else 607: base_water_thread = 608: (D_LOWLINE (current[0], FC) > D_LOWLINE (current[1], FC));
3つの場合にわかれているが、current[0], current[1] というのは各 diff を表していて、終わっちゃってたらもう一方のほう、というのが最初の2つである。最後のがまだどちらも終わっていない場合で、その場合は共通ファイル(FC)の行番号の下端(D_LOWLINE)が小さいほうを表すインデックスを base_water_thread に代入している。
比較の結果の 0, 1 がそのままインデックスにつかえるからといってそのままつかうのはちょっとなんであると思わないでもないが、ここではそうなっている。
論理値と整数をどの程度区別するかという基準は人によるが、もうちょっと区別してもいいんではなかろうかというのは甘いだろうか。
ふと、OpenCVS の使っている diff のアルゴリズムを調べてみる。
http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/cvs/diff.c?rev=1.90&content-type=text/x-cvsweb-markup
によれば Harold Stone の、ということだが、むー、これって V7 のか? 少なくともコメントの部分はよく似ている。
39枚用意してしまったら、だいたい 90分だった。ただ、喉が枯れた。
むぅ、次回はちょっと少なくして 90分に挑戦か。
あと、話している最中に聴衆を見るスキルが欲しい。
そういえば昨日書泉に、電撃の新刊が明日 (昨日の明日なのでつまり今日) 入るという告知があって、今日の午前中に文教堂に寄ったのである。でもなかったので、講義の後、(前出のとは別の) 文教堂に寄ったのだが、やっぱりなかった。帰りの乗換駅で、BOOK GARDEN に寄るもやはり小規模店舗に期待できるものではなく、そもそもそのジャンル自体が存在しない。また違う乗換駅で、(前出のとは別の) BOOK GARDEN に寄るもやはり同様で小規模店舗は使えない。(前出のと同じ) 書泉に寄ろうかと考えるも閉店時間を過ぎていたのでやめ、思い立って途中で降りて (前出のとはさらに別の) 小規模ではない BOOK GARDEN に寄る。そうするとあったので 2冊入手。まぁ、なかったら改札を出てまんがの森に寄ったであろうが、そうなったとしてあったかどうかは微妙なところか。
ということがあったあと、駅を歩いていると北海道の産物を売っている出店があったので眺めてみた。
まりも羊羹というのがあって、見事に深い緑色である。ちょっと興味をひかれ、手に取ってみる。抹茶かなぁ、と思いつつ原材料を見ると、抹茶は載っておらず、着色料が 3種類書いてあった。
あと、北海道産小麦粉使用、沖縄黒糖、というかりんとうがあり、いけなくはないが産物というものの定義を考えさせられる気がした。
ふと、ps して sshd -R というのを見かけたので調べてみると、sshd が exec しなおすようになって、そのときに使っているものらしい。
講義で、質問用として伝えてあるメールアドレスは gmail なのだが、学生からのメールがことごとく spam 認定されるのはなぜだろう?
結局、枚数は減らさなかったのだが、80分でおわってしまった。
うぅむ。
ふと思い立って、有明から水上バスに乗ってみる。
講義のサンプルとして、簡単な正規表現エンジンを書く。講義資料は 40枚。うぅむ、長くなってしまった。
そうそう。講義資料は以下のところで公開していなくもない。
<URL:http://staff.aist.go.jp/tanaka-akira/textprocess/>
内容は Ruby の話と正規表現の話が混じったようなもの。
講義が火曜で、前日には参照できるようにしている。
新宿で JR から小田急に乗り換えるのだが、そこで本屋に寄り道するにはどうしたらいいか?
新宿のでかい本屋といえば即座に紀伊國屋が思い浮かぶが、小田急とは方向が逆である。
というようなことを考えつつ、いろいろ寄り道している。
先週は行きに小田急百貨店の三省堂と京王百貨店の啓文堂に寄り、帰りに紀伊國屋本店 (Forest) と三越のジュンク堂に寄ってみた。
行きに寄った 2つはぜんぜん使えない。2度と行かないと思う。帰りに寄ったのは、まぁでっかい本屋なので、興味を持っている分野も豊富である。
今日は、行きに LUMINE2 のブックファーストと LUMINE1 のブックファーストに寄り、帰りに紀伊國屋新宿南店に寄った。
LUMINE2 のブックファーストは使えない。LUMINE1 のはそこそこ。紀伊國屋新宿南店は、1F がいきなり埋めつくされていて良い印象である。
そういえば、(前期ではないが) ひろのぶさんの UNIX の講義もあるのである。資料は公開されているのかな、と思ってさがしてみると、されていない模様。
まぁ、大学内からメールを出せれば読める感じだが、さて。
少し前に気がついたのだが、fcntl のマニュアルに以下の記載がある。
... int fcntl(int fd, int cmd, long arg); ... F_SETFL Set the file status flags to the value specified by arg. File access mode (O_RDONLY, O_WRONLY, O_RDWR) and file creation flags (e.g.,O_CREAT, O_EXCL, O_TRUNC) in arg are ignored. On Linux this command can only change the O_APPEND, O_ASYNC, O_DIRECT, O_NOATIME, and O_NONBLOCK flags.
これはつまり、fcntl(fd, F_SETFL, long_value) というように、F_SETFL を使うときは第3引数に long を渡すということである。
が、しかし、POSIX (IEEE Std 1003.1-2001) では、ここは int なのである。
... F_SETFL Set the file status flags, defined in <fcntl.h>, for the file description associated with fildes from the corresponding bits in the third argument, arg, taken as type int. Bits corresponding to the file access mode and the file creation flags, as defined in <fcntl.h>, that are set in arg shall be ignored. If any bits in arg other than those mentioned here are changed by the application, the result is unspecified. ...
とりあえずマニュアルの問題として報告はした。 debian-bug:368382
だが、これが何の問題であるのか、また実際に問題が起こる状況が存在するのか、という点はなかなか難しい所である。
Linux Conference 2006 (1日目)
[latest]