金沢
辰口
forward を切る。
さらば virus/SPAM
Ribosome build system.
やっぱり、切るのは止めて、forward 先を変えるだけにする。
帰還
sort をするときに、比較関数が壊れていたらなにが起こるだろうか?
極端な話、比較関数が毎回異なるランダムな結果を返すとすると、 とりあえず、バブルソートはなかなか終了しなさそうである。 が、クイックソートは終了するだけは問題なくするように思う。
では、ランダム程には壊れておらず、 同じものを比較すれば同じ結果が返って来るとしても、 全順序になっていないときにはどうなるか?
STDIO で、r/w の境目では seek が必要なことがある。 seek できないものに対してそういう状況になるとどうなるか?
% ruby -e ' open("/dev/tty", "r+") {|f| p f.read(1) f << "xyz" } ' abc "a" -e:2:in `open': Illegal seek - "/dev/tty" (Errno::ESPIPE) from -e:2
とエラーになるのは GNU/Linux だが、 FreeBSD や Solaris ではとくにエラーにならない。
A followed by B の解釈でどっちが先でどっちが後だったかしばらく悩む。
普通は文脈から簡単にわかるものだが、 A followed by B と B folowed by A の話が両方書いてあって、 それが微妙にしか違わない上、 まさにその違いがどっちがどっちかを知りたかったため、 文脈には頼れなかったのであった。
富士
network unreachable.
富士
富士
帰還
たくさん議論したはずなのだが、あんまり覚えてないなぁ。
s/// の適用における正規形と停止性はどんなものだろう?
箱根到着
発表... 終了
host コマンドは名前解決に失敗しても exit status が 0 であることに気がつく。
箱根
箱根
帰りがけに八重洲ブックセンターに寄る。
のんびり寝てすごす。
関数型 make の次は関数型 shell はどうだろう?
もちろん、lisp 系な shell はいくつかあるので、 そうではない pure なやつである。
おととい入手した、 Mastering Regular Expressions, second edition を眺める。
そーか、.NET の Balancing group というのはそーいうものであったか。 あんま素直じゃないなぁ。
ふむ。やっぱ Class set operation は Java にしかないんか...
ふと思いついて algebraic datatype もどきを作ってみる。
require 'datatype' datatype :Exp, [:Var, :name], [:Abs, :name, :body], [:App, :operator, :operand] def ev(exp, env) n = b = f = a = nil case exp when pattern { Var[:n] } if pair = env.assoc(n) pair.last else raise "unbound variable: #{n}" end when pattern { Abs[:n, :b] } lambda {|v| ev(b, [[n, v], *env])} when pattern { App[:f, :a] } ev(f, env).call(ev(a, env)) end end p ev(Var[:a], [[:a, 1]]) p ev(App[Var[:succ],Var[:a]], [[:a, 1], [:succ, lambda {|v| v + 1 }]]) p ev(App[Abs[:v, Var[:v]],Var[:a]], [[:a, 1]])
パターン中で変数に束縛しようとすると、事前に初期化が必要なのがちとナニである。 (また、述べるまでもなくパターンマッチの効率が悪いということも)
algebraic datatype を宣言するキーワードに datatype, data, type のどれを選ぶか?
明日(と明後日)は PRO に行ってみるか。
Ruby の BTS に登録したバグレポートのうち、今年度のぶんを分類してみる。
最新版(ruby 1.8.0 (2003-03-12))ではバグが再現しない: 104 報告時にはすでにその時点での最新版で直っていた: 1 報告した挙動は仕様でありバグではなかった: 4 最新版と報告時の挙動が変わっていない(バグか仕様か不明): 6
計115
言語と OS, どっちが下か?
反省気味...
gdb の ignore の使い方を覚える。
ruby の問題が volatile であったことが判明したので、 静的解析で volatile の必要性を判断できないか考えてみる。
とりあえず、各関数について実行中に GC が起き得るかどうかは求められそうである。
とすると、あとは危なげな VALUE を形式化すればいいのだが...
動的な検査としては、GC が起き得るところでは全て起こるようにして Rubicon を動かしてみるという手が使えるかもしれない。
どのくらい時間がかかる?
パッチと言うのは一般用語なのかなぁ。
ふむ。いつでも TPT?
% zdump -v Asia/Dili Asia/Dili Fri Dec 13 20:45:52 1901 UTC = Sat Dec 14 05:08:12 1901 TPT isdst=0 gmtoff=30140 Asia/Dili Sat Dec 14 20:45:52 1901 UTC = Sun Dec 15 05:08:12 1901 TPT isdst=0 gmtoff=30140 Asia/Dili Sun Dec 31 15:37:39 1911 UTC = Sun Dec 31 23:59:59 1911 TPT isdst=0 gmtoff=30140 Asia/Dili Sun Dec 31 15:37:40 1911 UTC = Sun Dec 31 23:37:40 1911 TPT isdst=0 gmtoff=28800 Asia/Dili Sat Feb 21 14:59:59 1942 UTC = Sat Feb 21 22:59:59 1942 TPT isdst=0 gmtoff=28800 Asia/Dili Sat Feb 21 15:00:00 1942 UTC = Sun Feb 22 00:00:00 1942 TPT isdst=0 gmtoff=32400 Asia/Dili Sun May 2 14:59:59 1976 UTC = Sun May 2 23:59:59 1976 TPT isdst=0 gmtoff=32400 Asia/Dili Sun May 2 15:00:00 1976 UTC = Sun May 2 23:00:00 1976 TPT isdst=0 gmtoff=28800 Asia/Dili Sat Sep 16 15:59:59 2000 UTC = Sat Sep 16 23:59:59 2000 TPT isdst=0 gmtoff=28800 Asia/Dili Sat Sep 16 16:00:00 2000 UTC = Sun Sep 17 01:00:00 2000 TPT isdst=0 gmtoff=32400 Asia/Dili Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 12:14:07 2038 TPT isdst=0 gmtoff=32400 Asia/Dili Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 12:14:07 2038 TPT isdst=0 gmtoff=32400 % TZ=Asia/Dili date -d '2000-09-16 15:59:59Z' Sat Sep 16 23:59:59 CIT 2000 % uname -a Linux serein 2.4.20-686 #1 Mon Jan 13 22:22:30 EST 2003 i686 Mobile Intel(R) Pentium(R) III CPU - M 1200MHz GenuineIntel GNU/Linux
ちょっと typo を修正してみる。
実装から仕様を学ぶにあたって、バグはどのくらい問題になるか?
non-blocking に設定した fd に対して stdio を使ったときの挙動は規定されているのだろうか?
glibc の info には、使うな、と書いてあることに気がつく。
しかも、あるプロセスで non-blocking にしたら、共有している他のプロセスでも non-blocking になっちゃうからそっちでも stdio を使うのはまずいとのこと。
うむ。たしかにそれはそうだ。なかなか。
InfoPath の記事を読んでみる。
FIONREAD というのはどのくらいポータブルなのだろう?
% ruby -e 'open("zz", "w+") {|f| f.print "a"; f.ungetc ?x}' % ls -l zz -rw-r--r-- 1 akr akr 938426601 Mar 26 18:13 zz
うぉ。
... てゆーか、core を吐くこともあるか。
% rm -f zz % cat t.c #include <stdio.h> int main() { FILE *f = fopen("zz", "w+"); fputc('a', f); ungetc('b', f); exit(0); } % gcc t.c % ./a.out % ls -l zz -rw-r--r-- 1 akr akr 939296633 Mar 26 18:44 zz
ふむ。glibc か?
日本語の句点は文の最後につける。 英語のピリオドもそうである。 また、C のセミコロンも同様である。
だが、Pascal のセミコロンはそうではなく、 文と文の間にいれるものである。
文の区切りかたが Pascal に似ている自然言語はあるだろうか?
また、原理的に言えば、文を開始する記号を考えることもできるが、 そういう言語はあるだろうか?
お、tidy に続いて file もライブラリ化?
新橋
散財
google で abstruct: 約4,990件
[latest]