[iterate-devel] Version plan for Iterate 1.4 and 1.5

Hoehle, Joerg-Cyril Joerg-Cyril.Hoehle at t-systems.com
Thu Jun 2 16:28:00 UTC 2005


Marc Battyani wrote:
>> Plans for 1.5:
>> + Move more code from the initially / loop prologue section 
>inside the let
>> binding initialization, which might cause some user code to 
>fail because of code movement

>Please don't wreck that! It's the reason I initially started 
>to use iterate.
>Those parts (prologue/epilog/var bindings) are under (and 
>badly) specified
>in LOOP and implementations differ on this. So let's keep it 
>in a sane way.

What I mean is that Iterate is inconsistent. Did you know that WITH clauses get completely placed inside the surrouding let, while FOR ... ON <list> gets set in the :initially section, while other (e.g. reducing ...) also get set inside LET?

I wanted to move as much as possible inside the surrouding LET.
There's a *small* posibility that user code will break.

In fact, I expect none of the current tests to fails as a result of such a change.


>> For a farther future: move to another design for iteration
>Do you already have some ideas on this ?
No. gclcvs (which passed most Iterate tests) reminded me of the other Iterate package featuring gathering. I'll look at that.


What really disturbs me with Iterate has a design weakness about referential transparency and inadvertent capture, e.g.
(iter (with-some-other-macro (collect foo)))
when with-some-other-macro itself expands to an iterate loop.

It similar to those cases when an implicit block would change the target of a return statement.

There's IMHO no way around that deficiency in Iterate.

LOOP OTOH is robust against that, since it knows no clauses nested inside normal Lisp forms.

Regards,
	Jörg.



More information about the iterate-devel mailing list