Specialize equal?, eqv?, and = to eq? when one of the arguments is a fixnum constant.
Marc: You should specialize equal?, eqv?, and = to eq? when one of the arguments is a fixnum constant. Brad
Afficher les réponses par date
On 22-Aug-05, at 5:22 PM, Bradley Lucier wrote:
Marc:
You should specialize equal?, eqv?, and = to eq? when one of the arguments is a fixnum constant.
Brad _______________________________________________ Gambit-list mailing list Gambit-list@iro.umontreal.ca http://mailman.iro.umontreal.ca/mailman/listinfo/gambit-list
For quite some time the specialisation from eqv? to eq? on eq?- testable constants (such as symbols, 32 bit fixnums, characters, #t, #f, etc) is performed by the compiler. I have extended this to equal?. For example, the following code (declare (standard-bindings)) (define (f1 x) (if (equal? x 1000000) 'foo 'bar)) (define (f2 x) (if (equal? x 1000000000000000000000) 'foo 'bar)) now expands to (define f1 (lambda (x) (if ('#<procedure #2 ##eq?> x 1000000) 'foo 'bar))) (define f2 (lambda (x) (if (equal? x 1000000000000000000000) 'foo 'bar))) So in compiled code, (equal? x '()) is as fast as (null? x) Unfortunately the specialization of = to eq? on 32 bit fixnums does not work, because (= x 0) != (eq? x 0) when x is 0.0 . Marc
participants (2)
-
Bradley Lucier -
Marc Feeley