Hi,
Attila Lendvai wrote:
fyi, there's a quite good walker in arnesi hiding platform dependency. the #L reader in arnesi is using it and macrolet works with it. unfortunately it should be factored out into a separate lib, just like the call/cc transformer using it. it's on my TODO, but long at the end.
Just for the record, any portable code walker is *not* a solution. IIRC, last time I looked, arnesi cannot handle UNWIND-PROTECT or EVAL-WHEN -- for obvious reasons. Iterate has a code walker that is as good as a portable code walker can go (portable in the ANSI CL glossary meaning). What's needed is some non-portable integration with the various implementations, so that the environment is handled correctly (*macroexpand-hook* is not enough). Such functionality could be factored out indeed, in a separate library. Maybe also PCL's code-walker has implementation-specific code?
BTW, there's that empty CVS directory in the iterate project
directory. Shall I delete it or does it serve some purpose? i don't have it in my repo.
Oh, it's not in Darcs, it's in ~iterate/, not in the Darcs/ subdir.
BTW, unsatisfied with the limitations inherent in Iterate's current implementation, I've been looking at various list comprehension designs (Mario Latendresse, Sven-Olof Nyström, Olin Shivers, SRFI-42). Iterate is still interesting and it's unclear to me whether the actual problem is either: - Iterate's design, which requires a code-walker to detect gatherers nested deep within the body - ANSI CL limitations, which make macros that depend on a code-walker a can of worms, making designs like Iterate hard if not unsuitable.
Note that LOOP, SRFI-42 and all the others do not depend on a code walker. They all supply their own grammar and thus know where clauses can appear (at top-level of the form).
BTW2, send me an e-mail if you want an enhanced version of Mario Latendresse's comprehension macro. (When I'll have more time, I'll post to cliki).
Regards, Jörg Höhle