Re: [Scheme-reports] Procedural equivalence: the last debate xacc.ide@gmail.com 06 Jun 2013 17:39 UTC

Due to the lack of type inference and dumb handling in the IronScheme REPL,
here is my apples to apples comparison:

> (library (foo)
.   (export cowan-test-eq cowan-test-eqv)
.   (import
.     (except (rnrs) - =)
.     (rename (ironscheme unsafe) ($fx- -) ($fx=? =))
.     (ironscheme typed))
.   (define: (cowan-test-eq (n : fixnum) x y)
.     (cond ((eq? x y) 'done)
.           ((= n 0)
.            (cowan-test-eq n 'a 'a))
.           (else
.            (cowan-test-eq (- n 1) x y))))
.   (define: (cowan-test-eqv (n : fixnum) x y)
.     (cond ((eqv? x y) 'done)
.           ((= n 0)
.            (cowan-test-eqv n 'a 'a))
.           (else
.            (cowan-test-eqv (- n 1) x y)))))
> (import (foo))
> (time (cowan-test-eq 100000000 'a 'b))
Statistics for '(cowan-test-eq 100000000 'a 'b)':
  Real Time:  67ms
  CPU Time:   62ms
  User Time:  62ms
  GC's:       0
done
> (time (cowan-test-eqv 100000000 'a 'b))
Statistics for '(cowan-test-eqv 100000000 'a 'b)':
  Real Time:  1222ms
  CPU Time:   1217ms
  User Time:  1217ms
  GC's:       0
done

On a 4.5Ghz i7.

eq? simply tests for pointer (reference) equality, eqv? calls .NET's
object.Equals(object, object). It makes no difference if I add a fast path
for testing pointer equality in eqv?.

Without the type hints, = and - takes up most of the time and the times are
in the tens of seconds :(

Cheers

leppie

-----Original Message-----

                 eq?         eqv?

Larceny           .4          2.2
Ikarus            .4          2.1
Racket           1.2          3.1
ypsilon          4.5          6.5

_______________________________________________
Scheme-reports mailing list
Scheme-reports@scheme-reports.org
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports