[gambit-list] Meroon

Bradley Lucier lucier at math.purdue.edu
Fri Mar 12 16:38:25 EST 2010


This thread got me wondering whether "unsafe" Meroon accessors, setters,
etc., would be of interest to people.

On the machine I'm sitting in front of, I get with the current Meroon

(meroon-instance-creation .15108799934387207)
(meroon-access .041027069091796875)
(meroon-modif .04129195213317871)
(meroon-dispatch-2 .5176689624786377)
(meroon-dispatch-5 .9149508476257324)
(meroon-polymorhpic-dispatch-2 .5540168285369873)
(meroon-polymorhpic-dispatch-5 1.0130860805511475)

If I define a new file _meroon#.scm that contains everything needed for
check-class and include it in the benchmark file, I get

(meroon-instance-creation .16762185096740723)
(meroon-access .012614011764526367)
(meroon-modif .011465072631835938)
(meroon-dispatch-2 .48472118377685547)
(meroon-dispatch-5 1.0633580684661865)
(meroon-polymorhpic-dispatch-2 .4715709686279297)
(meroon-polymorhpic-dispatch-5 1.0170669555664062)

So, it's a bit over three times as fast.

But if I rewrite the getter/setter/... code to allow the user to define
a macro

(define-macro (meroon-safe-fields?) #f)

that eliminates the runtime checks I get

(meroon-instance-creation .16996002197265625)
(meroon-access .002710103988647461)
(meroon-modif .0028591156005859375)
(meroon-dispatch-2 .5442471504211426)
(meroon-dispatch-5 .9221928119659424)
(meroon-polymorhpic-dispatch-2 .49954700469970703)
(meroon-polymorhpic-dispatch-5 .9451491832733154)

and with define-type I get

(define-type-instance-creation .0019330978393554688)
(define-type-access .003993988037109375)
(define-type-modif .002807140350341797)
(define-type-dispatch-2 .047636985778808594)
(define-type-dispatch-5 .13761401176452637)
(define-type-polymorhpic-dispatch-2 .06707501411437988)
(define-type-polymorhpic-dispatch-5 .17751502990722656)

So accessing and modifying is about as fast as with define-type;
instance-creation is more, but that's because instance creation calls
the intialize! generic on the created instance, and I don't want to give
that up.  (After all, Meroon should offer *something* beyond define-type
structures.)

So, what do you think? The macro definition

 (define-macro (meroon-safe-fields?) #f)

would apply to the current file, meaning something like

(declare (not meroon-safe-fields))

Is it so important to have fast unsafe access and modification
functions?

Brad




More information about the Gambit-list mailing list