[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Scheme-reports] Procedural equivalence: the last debate

On Sat, Jun 8, 2013 at 9:09 PM, John Cowan <cowan@x> wrote:
I am now prepared to make a recommendation to WG1 on procedural
equivalence.  I recommend that we return to R5RS semantics by rescinding
both tickets #125 and #467.  This means that `eqv?` must return true on
procedures with the same location tags, must return false on procedures
that behave differently, may return either on all other pairs of
procedures, and `eq?` must always return the same as `eqv?` on procedures.

I agree with John's recommendation.  R5RS is perfectly workable and well understood, and WG2 declarations will give implementers more latitude to allow optimizations that R5RS does not.

My only request is that, in order to minimize confusion, we vote on specific language, not just the proposal that we "... return to R5RS semantics...."  Therefore, I specifically propose that we preserve the following language, which I have copied directly from R5RS:

  The eqv? procedure returns #t if... obj1 and obj2 are procedures whose
  location tags are equal.

  The eqv? procedure returns #f if... obj1 and obj2 are procedures
  that would behave differently (return different value(s) or have
  different side effects) for some arguments.

  The above definition of eqv? allows implementations latitude in
  their treatment of procedures and literals: implementations are free
  either to detect or to fail to detect that two procedures or two
  literals are equivalent to each other, and can decide whether or not
  to merge representations of equivalent objects by using the same
  pointer or bit pattern to represent both.

  Eq? and eqv? are guaranteed to have the same behavior on symbols,
  booleans, the empty list, pairs, procedures, and non-empty strings
  and vectors.
Scheme-reports mailing list