2008-08-01から1ヶ月間の記事一覧

死蔵コマンド

スラッシュドットに「死蔵しているコマンド、どのくらいありますか?」なんて記事が載ってた。Plan9なら、 cpu% ls /bin | wc 339 339 3673でほぼ正確なコマンド数がわかる*1。339個。最近は組込み用のBusyBoxでも、200個近くのコマンドをサポートするように…

コンウェイの法則(Conway's Law)

libtaskが提供するコルーチン。その歴史は古く、マルチプロセス/スレッドが登場する以前の並行システムの実装によく用いられていた。例えば、Simulaとかが有名だが、スラッシュドットに次のような書き込みを見つけた。 Simula開発者Kristen Nygaard氏死去An…

エラトステネスのふるい

libtaskはチャネルにも対応している。ということで、Limboで書いたエラトステネスのふるいをC + libtaskで書き直してみた。Plan9日記では何度もチャネルを取り上げているが、チャネルはタスク間でメッセージをやり取りするための通信手段を提供する。chancre…

one true awk

なんと最近のawkはXMLまでパージングできるらしい。しかし、それはこのエントリの話題とは関係なくて、日本 GNU AWK ユーザー会の「awk から xgawk へ」というプレゼン資料の歴史の記述に注目したい。また、歴史検証ネタだ。 ご存知のように awk は 1977 年…

MacOS Xのfork/execが遅い件について

オフトピ*1だが、「libtaskとPthreadの比較」で軽く触れた、MacOS Xのforkが遅い件についてもう少し調べてみた。前回使ったプログラムはこんな感じのもの。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/time.h> enum { ITER = 100 }; void do_fork(void) { pid_t pid; </sys/time.h></unistd.h></stdlib.h></stdio.h>…

ACM SIGOPS Operating Systems Review

ACM SIGOPS Operating Systems Reviewの最新号の特集が「Research and developments in the Linux kernel 」ということで、Linuxカーネル関連の論文が集められている*1。その中に、「Plan 9 authentication in Linux」*2という論文が収録されている。セキュ…

即席httpdを書いてみる

libtaskの例として、httpdを書いてみた。200行ぐらいだけど、コアの部分はこんな感じ。fdread/fdwriteはノンブロッキングI/Oなんだけど、普通のシングルスレッドプログラムのようにselectループを書く必要がない。どうなっているかというと、libtask内部でス…

libtaskとPthreadの比較

Russ Coxさんが作ったコルーチンライブラリlibtaskを試してみた。雰囲気はPlan9のlibthreadによく似ている。対応している環境は、Linux (ARM and x86)、FreeBSD (x86)、OS X (PowerPC and x86)、SunOS Solaris (Sparc)とのことだ。コルーチンはプログラマが…

patch違い

diffの次はpatch。patchを作ったのはPerlのLarry Wallさんであることは有名だ。Wikipediaから引用してみる。 1985年にはラリー・ウォールが、このdiff出力を入力として受け取ってファイルを変更するというアイデアを一般化、拡張して、別コマンドとしてpatch…

diffのアルゴリズム

ふと見つけた「あなたが一番好きなアルゴリズムを教えてください。また、その理由やどんな点が好きなのかも教えてください」を読んで、diffのアルゴリズムを調べてみた。2つのファイルの違いを見つけるには、共通する部分が最長になるペアを見つければよい。…