[Edu-sig] Properties use case

Scott David Daniels Scott.Daniels at Acm.Org
Sat Mar 18 21:19:45 CET 2006


Arthur wrote:
>  
> 
>>> -----Original Message-----
>>> From: edu-sig-bounces at python.org 
>>> [mailto:edu-sig-bounces at python.org] On Behalf Of Arthur
>>> Sent: Saturday, March 18, 2006 1:39 PM
>>> To: 'Scott David Daniels'; edu-sig at python.org
> 
>>> I don't understand, really, the distinction 
>>> between a vector expressed as a list and a vector expressed 
>>> as a tuple, from the concept of a complex number in mutable 
>>> form, and one in immutable form. 
>>>
>>> If you feel like trying to help...
> 
> 
> Put another way, if I take the PyPy implementation of the complex primitive,
> and comment out the 2 property lines that restrict the write to real and
> imag - and instead of calling it a primitive I call it a class.  And I use
> the class as such - where have I gone wrong?
> 
> Art

OK, so as I said in my over-long thing, immutable types have an exciting
property that you can't really tell aliases from copies.  This makes
Python's call method behave a lot like "call-by-value" -- a good thing,
since call-by-value is easy to analyze (both for machines and humans).
With mutables, you have the question of "caller-saves" or "callee-saves"
in function calls.  Caller-saves makes a copy to do the call with, and
callee-saves makes a copy on function entry (at least for those args
for which there will be mutation).  Typically, a lot of effort (either
by the compiler or the programmer) is expended to keep all of this
copying to a minimum.  With immutables, you needn't do any of the
bookkeeping.  It is not that you have gone terribly wrong; it is that
you have opened the lid on a large class of avoidable problems.  If you
look at Java's strings (as I remember -- it has been forever since I
studied Java at all), you will find they are mutable.  You also find
that Java code copies strings a _lot_, just to be safe against lower-
level mutation.

Your primitive complex (the mutable one) also could not be used as a
dictionary key except by identity, which would not allow rapid access.

--Scott David Daniels
Scott.Daniels at Acm.Org



More information about the Edu-sig mailing list