Hi David,

On Wed, Aug 29, 2012 at 9:12 PM, David A. Wheeler <[email protected]> wrote:
>
> First, trac #338 has the display procedure "generate loops like write", but 
> it appears to me that the later resolution in #442 means that the resolution 
> of #338 started with a false premise.  After all, the write procedure no 
> longer generates "loops like write", as was assumed by #338 vote.  So #338 
> needs revisiting.

Incorrect, as John pointed out `write' does generate loops in the
presence of cycles, and for more clarification the ticket was also
restricted to cycles to begin with.  There is no ambiguity here.

> Second, trac #442's resolution imposes a large overhead that is completely 
> unnecessary to meet the stated goal (termination).  The comments in #442 make 
> it clear that for ordinary "write", the primary thing some people cared about 
> was termination in the presence of cycles.

Your comment is overly long so I'll summarize.  You
believe that allowing write to first output many megabytes
or gigabytes of garbage before detecting a cycle and
raising an exception could be done more efficiently than
detecting the cycle when it first occurs.  I'm not convinced
of this - the output itself has an arbitrarily large overhead
either on the runtime (for string/in-memory ports) or the
OS (for files).  If you set the recursion threshold too
low it's no different from checking for cycles initially,
if too high it's an easy way to explode a lot of memory
or disk.

Furthermore detecting cycles (in advance or on the fly)
can be done with a eq-hash-table with O(n) time and
O(d) space, where d <= n is the length of the longest
cycle.  Thus asymptotically it could be argued this is
faster than your proposal.

I'm also uncomfortable with `write' raising exceptions
where it never did before.

And if you want speed you can use `write-simple'.

> In addition, there seems to be a major gap in the definition of "equal?" 
> involving cycles.  It currently says, "Even if its arguments are circular 
> data structures, equal? must always terminate."  That additional sentence 
> adds a MAJOR new performance and implementation cost on "equal?" compared to 
> R5RS.

No it does not, this can be done essentially for free,
see http://www.r6rs.org/r6rs-editors/2006-February/000969.html

-- 
Alex

_______________________________________________
Scheme-reports mailing list
[email protected]
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports

Reply via email to