I'm going to file a formal objection with the SC about reverting
the R7RS-small semantics of procedure equivalence to the R5RS rules.
This means that closures have identity. If they don't, Alex has provided
the following list of what will break:
- Using procedures as lightweight objects or actors
- SRFI-17 (generalized set! needs to lookup procedure setter)
- TinyCLOS generics (needs to understand method identity)
- Elisp `add-hook' equivalents (needs to avoid duplicates)
- Fast paths such as SRFI-1 lset-* optimized for eq?,
or SRFI-95 sort optimized for <. See
https://wiki.call-cc.org/eggref/4/special-case for the
general case of special cases.
- Caching with procedures as (part of) the key. Given
a large enough cost and high enough cache hit ratio,
caching is an arbitrarily large speedup.
- Memoization. The (chibi parse) parser combinator
library memoizes combinators to achieve packrat
parser-like performance. The test case at
https://code.google.com/p/chibi-scheme/source/browse/tests/parse-tests.scm#121
runs in exponential time with memoization disabled,
and linear time otherwise.
Alex and John Boyle have debunked the argument from compiler performance to
my satisfaction, at least, and I have noted that a procedure with settable
variables is a mutable object and should have identity like other mutable
objects.
But I can't do this in the name of the WG if someone on the WG objects,
so I'm giving you all a chance to object. At least Cowan, Shinn, Hsu,
Sussman, Gleckler, and Snell-Pym are on board, and Ganz and Radul already
voted for R5RS semantics on ballot 6.
So I'd like to hear specifically from Bradley Lucier, Emmanuel Medernach,
and Jeffrey Read, all of whom voted for R6RS semantics last time.
Any objections to changing this decision?
--
Real FORTRAN programmers can program FORTRAN John Cowan
in any language. --Ed Post
co...@ccil.org