gauche.timeのtime-this関数を使うと、指定した関数の実行にどれくらい時間がかかるのかを測定することができます。

(time-this 実行回数 実行する関数)

例として、クラスを使った場合と、ベクタを適当にラップした型に対してアクセスするのとで、どの程度実行に差が出るのかを調べてみたいとします。

(use data.random)
(use gauche.time)

(define random-gen (integers$ 100000 1))

(define-class <hoge> ()
  ((first :init-keyword :first :accessor first)
   (second :init-keyword :second :accessor second)
   (third :init-keyword :third :accessor third)))

(define (<hoge>-bench)
  (define hoge-instance (make <hoge>
                          :first (random-gen)
                          :second (random-gen)
                          :third (random-gen)))
  (first hoge-instance)
  (second hoge-instance)
  (third hoge-instance))

(define (make-hoge first second third)
  (cons 'hoge (vector first second third)))

(define (hoge? hoge)
  (and (pair? hoge)
       (symbol? (car hoge))
       (eq? 'hoge (car hoge))))

(define (hoge-first hoge)
  (vector-ref (cdr hoge) 0))

(define (hoge-second hoge)
  (vector-ref (cdr hoge) 1))

(define (hoge-third hoge)
  (vector-ref (cdr hoge) 2))

(define (hoge-bench)
  (define hoge (make-hoge (random-gen) (random-gen) (random-gen)))
  (hoge-first hoge)
  (hoge-second hoge)
  (hoge-third hoge))

この-benchとhoge-benchの実行速度を計測してみましょう。

(time-this 100000 <hoge>-bench)
;; => #<time-result 100000 times/  0.467 real/  0.730 user/  0.000 sys>

(time-this 100000 hoge-bench)
;; => #<time-result 100000 times/  0.221 real/  0.290 user/  0.010 sys>

クラスを使った場合のほうが、そうでない場合よりも倍程度時間がかかることが分かりました。

(ただし、Gaucheの関数(特に総称関数)はクラスを利用することを前提としたものが多いため、必ずしもベンチマークの結果がいいからといってクラスではなくベクタを使うのが正解とは限りません)