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/