From 0f0beb024c96d0b3428d0791fb9554d578a2dc3e Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 27 Feb 2019 10:29:18 -0500 Subject: [PATCH] Do not use vector-set when creating record types This improves performance as mutations force the GC to do more work. --- scheme/base.sld | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/scheme/base.sld b/scheme/base.sld index 1d9c90e9..9a26cf58 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -1818,11 +1818,13 @@ ;; Record-type definitions (define record-marker (list 'record-marker)) (define (register-simple-type name parent field-tags) - (let ((new (make-vector 3 #f))) - (vector-set! new 0 record-marker) - (vector-set! new 1 name) - (vector-set! new 2 field-tags) - new)) + (vector record-marker name field-tags) + ;(let ((new (make-vector 3 #f))) + ; (vector-set! new 0 record-marker) + ; (vector-set! new 1 name) + ; (vector-set! new 2 field-tags) + ; new) +) (define (make-type-predicate pred name) (lambda (obj) (and (vector? obj) @@ -1832,12 +1834,15 @@ (lambda () (let* ((field-tags (vector-ref name 2)) (field-values (make-vector (length field-tags) #f)) - (new (make-vector 3 #f)) + ; (new (make-vector 3 #f)) ) - (vector-set! new 0 record-marker) - (vector-set! new 1 name) - (vector-set! new 2 field-values) - new))) + ; (vector-set! new 0 record-marker) + ; (vector-set! new 1 name) + ; (vector-set! new 2 field-values) + ; new + (vector record-marker name field-values) + ) + )); (define (type-slot-offset name sym) (let ((field-tags (vector-ref name 2))) (_list-index sym field-tags)))