[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

performance tuning of srfi-57 implementations

This page is part of the web mail archives of SRFI 57 from before July 7th, 2015. The new archives for SRFI 57 contain all messages, not just those from before July 7th, 2015.



As others have pointed out: the srfi-57 implementation is dog slow.
In the case of Kawa, this may be indicating Kawa bugs I haven't
tracked down yet and profiling may find places where my
 implementation is doing something silly.

In addition, I think it should be possible to tweak the code to
make it run faster on all/mot implementations.  Unfortuantely,
I don't pretend to understand the code (at least not yet),
but here are some ideas:

* The build-record macros seems to be always used with a
fixed integer first argument. Why not split it up into
multiple macros: (build-record 0 ...) -> (build-record-0 ...)
and so on.  This is likely to be a win, since implementations
spend less time searching through the clauses.  (Not a huge win,
assuming non-matching clauses will quickly fail quickly, but still
likely to be an improvement.)

* Avoid taking apart lists.  Instead of:
(define-syntax meta
  (syntax-rules (meta quasiquote unquote)
    ((meta `(meta ,(function . arguments)) k)
     (meta `(argument ...) (syntax-apply-to function k)))
do:
(define-syntax meta
  (syntax-rules (meta quasiquote unquote)
    ((meta `(meta ,(function . arguments)) k)
     (meta `argument (syntax-apply-to function k)))
I.e. replace "argument ..." by ". arguments" which
is likely to be much faster.

* I don't understand how the meta rule works, but would
it be possible to remove the outer layer of quasiquote?
I.e.:
(define-syntax meta-qq
  (syntax-rules (meta-unquote)
    ((meta-qq (meta-unquote function . arguments) k)
     (meta-qq arguments (syntax-apply-to function k)))
    ((meta-qq (a . b) k)
     (meta-qq a (descend-right b k)))
    ((meta-qq whatever k) (syntax-apply k whatever))
    ((meta-qq arg)
     (meta-qq arg (syntax-id)))))

* Avoid comparing string literals like "is-scheme?".
(No specific suggestion here.)
--
	--Per Bothner
per@xxxxxxxxxxx   http://per.bothner.com/