[Gauche-devel-jp] Re: Q:S 式の読み込みに関して

Back to archive index

KIMURA Shigenobu skimu****@mac*****
2004年 8月 12日 (木) 10:27:39 JST


私も以前にとある CAD の出力(S-式)を読み込みたくなって
同じような状況になりました。そのときはたまたま読み込みたい
データファイルが awk で処理しやすいようにインデントされていたので
適当にダブルクオートでくくったりして逃げました。

On Aug 11, 2004, at 12:19 PM, Kawai Shiro wrote:

> うーん、Common Lispのreadtableみたいな仕組みがあれば
> 読み込みをカスタマイズできるんですが、現在のGaucheの
> readは字句解析部がハードコードされちゃっているので、この
> ケースは自前でread相当のものを書くしかないような気がします。

最近 lexer サルしてるのでいい加減リーダを書いてみました。

http://homepage.mac.com/skimu/Gauche/mread.scm

サンプルデータ(6Mbytes ほどの一個の S 式)
http://homepage.mac.com/skimu/Gauche/sexp.dat.gz

動かしてみると、

% time gosh mread.scm < sexp.dat > /dev/null

real    0m19.006s
user    0m18.820s
sys     0m0.180s
% time gosh -e '(write (read))' < sexp.dat > /dev/null

real    0m7.444s
user    0m7.300s
sys     0m0.100s

三倍ちかく遅いです。 Scheme 版以外と頑張ってるじゃないの!
と思ったのもつかの間。

% time gosh -e '(read)' < sexp.dat > /dev/null

real    0m1.404s
user    0m1.340s
sys     0m0.060s

むむ、gosh は読むだけならこんなに速いの!!??
mread.scm  の write をコメントアウトして
もう一度実行

% time gosh mread.scm < sexp.dat > /dev/null

real    0m18.245s
user    0m18.030s
sys     0m0.210s

あれ? Scheme バージョンは write してもしなくても
そんなにかわらない。 read だけなら 10 倍遅いということが。
こんなもの?




Gauche-devel-jp メーリングリストの案内
Back to archive index