SRFI-64 ライブラリをシリアライズしてもサイズが大きい

SRFI-64 ライブラリをシリアライズしてもサイズが大きく、ロード時間がもったいない。まじめに調べる。

現状

サイズは 1.1MB 。大きい。

1139810 2009-03-29 12:59 testing.sls.fasl


(import (srfi :64 testing)) だけのプログラムのプロファイル結果。

time%        msec      calls   name                              location
  86           60          1   fasl-read
  14           10          0   (<top-level>)
  **           70         **   total

参考値として (srfi :42) 。

--rw-r--r--  1 taro taro 4.1M 2009-03-29 12:59 eager-comprehensions.sls.fasl

調査

マクロを利用しているライブラリのサイズが肥大化している。マクロを利用すると Record が多用されるので恐らく Record のシリアライズに問題があるはず。
eq? の意味で等しい Record / Rtd を同一視せず、登場のたびにシリアライズしてた。これか。

方針

Symbol や String と同様に lookup table を作りそこに放り込もう。
Record のシリアライズは思ったほど簡単ではなかったがうまく書けた。

改善後

1.1MB => 73KB

--rw-r--r--  1 taro taro 74221 2009-03-29 15:14 testing.sls.fasl

(import (srfi :64 testing)) だけのプログラムのプロファイル結果。

time%        msec      calls   name                              location
  67           20          0   (<top-level>)
  33           10       1180   hashtable-ref


よしよし。