Could this be useful for contracts? It expands into a macro definition and there are generally lots of irrelevant identifiers kept, I think.
You know -- this also makes me wonder if there could be a performance debugging tool in there. Perhaps something that takes a syntax object or a .zo file and inspects the information there much like the macro stepper does, but counts the number of bindings at each subexpression somehow. Robby On Sun, May 17, 2009 at 7:33 AM, Matthew Flatt <mfl...@cs.utah.edu> wrote: > [File under "obscure macrology" and "macro-expansion performance".] > > The `identifier-prune-lexical-context' function added in 4.2.0.2 strips > lexical information from an identifier if the information doesn't > affect the identifier's binding (or, more generally, the binding of > identifiers derived from a given list of symbols). > > There's also a derived `quote-syntax/prune' form, which is like > `quote-syntax' on an identifier, but that prunes the lexical > information from the identifier. Note that `(quote-syntax/prune id)' is > different from `(identifier-prune-lexical-context (quote-syntax id))'; > the later would wait until the expression is evaluated to prune lexical > information, while the former prunes it as the expression is expanded > (so that the lexical information isn't kept in bytecode, etc.). > > > You might wonder why irrelevant lexical information would be preserved > in the first place. The reason is `datum->syntax': The macro system > doesn't know whether lexical information will be transferred to some > other datum, where that extra information could become relevant. > > Probably `datum->syntax' is too powerful an operation, but I don't know > how to get rid of it. So, we've fought the excessive-information > problem with a lot of encoding, caching, and lazy-initialization > tricks. These tricks, however, fail for nested internal-definition > contexts created by `package', especially when `define*'s are used > within a package to create layers of bindings. I couldn't find new > tricks that work well enough without a pruning hint from the > programmer. > > > Use `quote-syntax/prune' or `identifier-prune-lexical-context' to > potentially reduce bytecode size when an identifier's context won't be > transferred to other syntax objects --- or perhaps only to '#%top, > which `quote-syntax/prune' excludes from pruning in addition to the > identifier's symbol. Pruning probably is not worthwhile on a macro > template, but it can be useful in the expansion of forms like > `define-struct' and `package' that keep lists of identifiers. > > _________________________________________________ > For list-related administrative tasks: > http://list.cs.brown.edu/mailman/listinfo/plt-dev > _________________________________________________ For list-related administrative tasks: http://list.cs.brown.edu/mailman/listinfo/plt-dev