12月15日から12月31日

* 2001/12/31

XEmacs

最近 XEmacs を再起動することが多くなったので、savehist と desktop を使うようにしてみる。ついでに desktop.el を Emacs 21.1 のものに sync する。

(setq savhist-file "~/.xemacs/.history")
(savehist-load)
(require 'desktop)
(desktop-load-default)
(desktop-read)

NIGHTFALL

読破。

* 2001/12/30

GGv

次の page に scroll すると左上に行ってしまってあまり有用でないので、 ignore_wrap のときは horizontal position を保つようにしてみる。 Full screen mode を galeon から頂こうかと思うが、思い留まる。

楽しく hack してないで、書かなければならない program をはやく完成させよう。

などと言いつつ、結局書いてしまう。

Nautilus

あんまり memory が余っているので、nautilus を起動するようにしてみる。 Drag and drop 等を試した後で back button を押すと core を吐いたので やっぱり使用をやめる。

* 2001/12/29

Linux 2.4.18pre1

diff の中に抜けているところがあるのか、17 から patch をあてた source では radeonfb の compile に失敗する。

* 2001/12/28

Automatic memory management

最近話していることのまとめ。

Automatic memory management は究極的には二度と使わない memory 領域の 再利用を行う system. ただし、これは停止性問題と同じで計算で求めることが できないので、何らかの方法で近似を行う。これは私の知る限り二つある。

Garbage Collection
Object の reachability
Region Inference
Object の scope

GC は tracing GC と reference counting に大別されるが、これは graph の たどり方が違うだけ。40 年間の研究は、この非常に単純な system の上で object の property (lifetime) や、architecture の特性、programming language の特性を活かしてどのように optimize するか、ということに 尽きる。

こんなにいろんなことがやられているのに、相変らずどの方式がどういうものに 良いかというのはあんまりはっきりしていない。Generational GC 1個を とっても、どういう timing で object を promote するかということすら 経験則による推測にすぎない。

このまま GC の研究を続けるなら、もうちょっと engineering から science になるような方向の研究をしたい、と思う。

XEmacs

M-TAB は Window manager に取られているので、 S-TAB を M-TAB と同等にしてみる。

(define-key function-key-map [(super tab)] [(meta tab)])

* 2001/12/27

帰省 (つづき)

京都から帰ってくる。ここ数年、京都に行って観光したという記憶がまったくない。

GGv

auto_jump を参考に ignore_wrap というものを作る。 望み通りの動作をしてくれるようになった。

Bonobo

GNOME

GNOME の application は menu を mouse で選択しているときに Control x や Alt x を押すと key binding ができるということを知る。 さすがに Super や Hyper はできないようだ。

* 2001/12/26

Alsa on ThinkPad X22

どうも amixer set Master 100% unmute がみそらしい。 これをやらないと alsamixer でいじっても音はでない。

依然としてどこが悪いのかはわからないけど、card-intel8x0.c で 無理矢理 #undef CONFIG_PM すると当然 suspend 時の NULL pointer dereference はでなくなった。 Suspend, resume 時の作業は apmd がよろしくやってくれるので、 しばらくこれで生活してみよう。

帰省

東京-新大阪間と東京-京都間の新幹線の特急料金は同じだということを知る。

音楽を鳴らしたり、compile をしたりしたが、X22 の電池は京都まではもった。 作業をしていても 3 時間弱もつというのはなかなか良い。

Portable dumper

dump したり、unmark したり、relocate したりするために同じような code を何度も書くのに飽きてくる。こうしてみると、XEmacs の description を 使った abstraction はそれなり良い方法であったということがわかる。

京都

バスの系統を間違えてとんでもないところに行ってしまう。 普段から道に迷うことはそれなりにあるが、ここまで派手に間違えるのはめずらしい。

himi さんに敗北宣言をしてくる。

* 2001/12/25

Portable dumper

どうやって cons cell 等を dump data から block に割り当て直しているのか 不思議だったのだが、どうも XEmacs は fixed type block に戻すということは していないようだ。どうやって GC が動いているんだろう。不思議だ。

pdump_objects_unmark という関数が sweep 時に呼ばれているのを発見。 各 object について、sweep 用の関数を再実装せねばならぬのか... Emacs はこの辺の abstraction が甘いのが嫌だな。

むむ、mmap 領域は途中の一部だけ free するというようなことはできないのか。 GC は全領域を触るので、dump data は memory に読み込まれてしまう。うまく ある page にあるものが全部 dead object になって、library がよろしく やってくれるとその領域は swap out して free したのと同じようになるのか。 ん、dead object になっていても unmark する関数がさわるので、そうはならないか。 まぁ、xemacs.dmp 自体が 2M しかなくて、そもそも dead object になるようなものは ほとんど含まれていないだろうから、あんまり気にしてもしょうがないか。

もうちょっと考えると、mmap 領域は全部事実上 root object なわけで、 GC も root object して扱うのが良いような気がしてきた。つまり、generational GC の older generation みたいな感じに scan するだけにすれば良いだろう。 dump 時に object を並び換えるのを実装する cost と unmark 用の関数を 書き直す cost との比較だけど、とりあえず後者の方が楽か。あ、あと前者だと 余分にごみを保持する可能性があるか。Write barrier を書いてこの部分だけ generational にしてみる? Vobarray を特別扱いすると結構いけそうな気もする。

Gnome GV

Debian unstable で HTML 形式の manual が install されていなくて悲しいのだが、 build dep に gnome-doc-tools が抜けている。この休み中に、いい加減 Debian の バグ報告のしかたくらいは覚えなければ。

GDB frontend

半年以上前に、GDB/MI を叩くような新しい XEmacs 上で動く frontend を 書きたい、というのを思った記憶があります。思っただけで何にもやっていないので、 私は今のところ素の GDB を使っています。

ThinkPad X22

Alsa をいじっているとなぜか突然音がでるようになる。 この前と何も変えていないのになぁ。なぜだ。

どうも、alsaconf を実行した場合は音が鳴るということが判明した。 Master が 90 以上でないとまったく聞こえないのか。うーむ。

* 2001/12/24

Gnome GV

Space を押しまくって postscript file を眺めているときに、 画面の右端に表示されていない部分が あると、次の page にいかずに常に右上にいってしまうのが欝陶しかったので、 適当に hack して Acrobat reader みたいに常に次の page にいくようにする。 dowrap を TRUE から FALSE にかえただけなので、とても patch を送れたものではないが、 暇ができたら書き直して option を追加してくれるように働きかけるとするか。

Linux 2.4.17

agpgart_be.c の i830 のところで NULL pointer reference で死ぬ bug は fix されたようだ。よかったよかった。

Meadow portable dumper

明日中に Windows で動くようにする、というのは既にほぼ不可能。 Linux で動く version を何とかでっちあげて許してもらおう。

* 2001/12/23

Meadow portable dumper

時間が無いので、XEmacs 方式の object の address を array に追加、 object の relocate された address を hash に登録、最後に array をなめながら address の変換をして dump, を実装することにする。

Subversion

svn_client_diff の Ruby と XEmacs binding を書こうかと思ったが、 callback を取る代わりに問答無用で diff を呼んでいてあんまり有用でないことが わかったためにやめる。

* 2001/12/22

partimage

ThinkPad 240 に Windows 98 を復活させようとするが、新しい partimage では invalid compression 何とかと言われて動いてくれず、かなりはまる。0.6.1 から 0.3.6 に downgrade すると無事動いて安心する。また downgrade するのは嫌なので、 image を作り直すことにする。

* 2001/12/21

GCTk

Jikes RVM 用の Garbage Collection Toolkit. この場合 Jikes RVM は EVM のような 役割を果たすわけだが、一番の違いは Jikes RVM では、VM も garbage collector も 全部 Java で書かれている、ということ。研究者にとっての一番の違いは source code が公開されている、ということに尽きる。

PTT 忘年会

忘年会二日目。

* 2001/12/20

Polymorphic Type Reconstructon for Garbage Collection without Tags

ML で tag なしで GC をしたいのだが、closure があるときにどうするのか、 というような話。

Garbage Collection for Embedded Java

GCJ の話。Pluggable GC ということで、EVM みたいなのを想定しているんだろうか? やっぱりそういう GC が pluggable なシステムは欲しいよね。

Book Review: Garbage Collection

Google で search していると Andrew Appel の GC 本の review の page を発見する。 そう、あの本には compiler support の項目がまったく無いのが問題だ。そのおかげで 関連研究を調べるだけでかなり時間を吸い取られる。

研究室忘年会

二日連続忘年会一日目。

* 2001/12/19

cvsps

Local に mirror した XEmacs repository で試してみる。結構有用だ。 ただ、source が library 風に書かれていないのが悲しい。これを使って CVS から Subversion への変換をしようとしたら、output を regexp matching で 処理しなければならない。

Subversion Ruby binding

svn_repos の変更点の binding を書き始める。

* 2001/12/18

ppp

Kernel も 2.4 になったことだし、ppxp から pppd に乗り換えることにする。 昔はいろいろと面倒だった記憶があるが、今は pppconfig で簡単に設定できる。 無事接続できるようになって満足。

Subversion

生活の一部がかなり Ruby binding で書いた code に依存しているので、 interface が変わって突然動かなくなると非常に困る。

ext3

ついでなので X22 の root partition を ext3 にする。

Support for Garbage Collection at Every Instruction in a JavaTM Compiler

以前は全ての instruction を GC safe point にすると root object の table が 大きくなるので実用的ではないと思われていたが、実は今までの table と 同じくらいの大きさに抑えられるらしい。

全 instruction が GC safe になって何が嬉しいかというと、 multithread application で、stop and copy 形式の GC を使っているときに safe point に全 thread が辿りつくまでの待ち合わせの時間が少なることが 良いらしい。

* 2001/12/17

Garbage Collection and Local Variable Type-Precisioin and Liveness in JavaTM Virtual Machines

従来の ambiguous roots, precise roots (type precise or not) に加えて、 live precise という概念を導入。Intra procedure での root object (stack variable) の liveness を解析することにより、root object の数を減らし、 どのくらい GC の性能に影響がでるかを実験。

これが ISMM 2000 の On the Effectiveness of GC in Java, という話に 続いていくわけか。On the Effectiveness of GC in Java は、完全に precise な GC が実現できたとするとどのくらい保持する object の量を 減らせるか、という話だったはず。

Galeon

やっぱり 1.0-2 のままだったので、1.0.1 を手元で build して放り込む。

xemacs-beta

流量多過ぎ。読みきれない。

XEmacs

CVS repository を rsync で取ってきて、xemacs-19 や xemacs-20 といった module があることに気付く。

(setq browse-url-browser-function 'browse-url-galeon)

うーむ。XEmacs に復帰したのは時期尚早だったか。時間がどんどん削り取られていく。 せめて Meadow の portable dumper を書くまではペースを落とそう。締切りが 近いのに全然書いてないし。

svn

Subversion list も X22 にかまけている間に爆発していて読みきれない。

* 2001/12/16

Gtk-XEmacs

何となく試してみる。Tab widget はでないし、widget の test を実行すると 落ちたので、予想通りあまり widget の実装はされていないようだ。 Menu の accelerator も出ない。

Gtk 用の test code のところを覗いて、XEmacs Lisp を使って rep-gtk みたいな雰囲気でプログラムが書けるということを知る。rep-gtk に比べて どううれしいのかは良くわからないけど。:-)

Galeon

.galeon/mozilla/galeon の prefs.js をいじらないと proxy を 使用してくれるようにならずはまりまくる。よーく見ると今使っているのは 最新では無いらしい。明日大学に行くと update されることを期待しよう。

XEmacs gutter

(set-specifier bottom-gutter-height 'autodetect)
(set-gutter-element bottom-gutter 'str "Hello" (selected-window))

上のようにすると bottom gutter に Hello と表示されるが C-l を押すと 消えてしまう。文字列は extent を保持するための \n しか考慮していないのだろうか? やはり redisplay, 特に gutter や widget の部分は怪しい。さらに、

(set-gutter-element top-gutter 'str "Hello\n")

とやると tab widget の上に Hello と表示されるはずだが、

(set-specifier default-gutter-visible-p nil)
(set-specifier default-gutter-visible-p t)

とやるまで表示されない。さらに、C-x o で window 間を移動していると どんどん上の window が縮んでいく。Geometry 計算は gutter を考慮していない?



copyright (c) Yoshiki Hayashi <penny@sodan.org>