Marko Rauhamaa <ma...@pacujo.net>: > That's circular reasoning. When you are defining Python's execution > model, you can't refer back to Python's execution model. > > For a good example of what I'm after, take a look how Java specifies its > crucial happens-before relation: > > <URL: > http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4.5>
However, Java does *not* do a particularly good job defining object identity (<URL: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21.3>): At run time, the result of == is true if the operand values are both null or both refer to the same object or array; otherwise, the result is false. The result of != is false if the operand values are both null or both refer to the same object or array; otherwise, the result is true. For a more worthy attempt, we'll have to take a look at Scheme (<URL: http://www.scheme.com/tspl2d/objects.html>): * Two objects of different types (booleans, the empty list, pairs, numbers, characters, strings, vectors, symbols, and procedures) are distinct. The Revised4 Report (but not the ANSI/IEEE standard) permits one exception to this rule: the empty list and the boolean #f may be identical. * Two objects of the same type with different contents or values are distinct. * The boolean object #t is identical to itself wherever it appears, and #f is identical to itself wherever it appears, but #t and #f are distinct. * The empty list () is identical to itself wherever it appears. * Two symbols (created by read or by string->symbol) are identical if and only if they have the same name (by string=?). * A quoted pair, vector, or string is identical to itself, as is a pair, vector, or string created by an application of cons, vector, string, etc. Two pairs, vectors, or strings created by different applications of cons, vector, string, etc., are distinct. One consequence is that cons, for example, may be used to create a unique object distinct from all other objects. * Two procedures that may behave differently are distinct. A procedure created by an evaluation of a lambda expression is identical to itself. Two procedures created by the same lambda expression at different times, or by similar lambda expressions, may or may not be identical. Marko -- https://mail.python.org/mailman/listinfo/python-list