[Edu-sig] Properties use case

Grégoire Dooms dooms at info.ucl.ac.be
Thu Mar 23 16:24:39 CET 2006


Arthur wrote:
>  
>
>   
>>> -----Original Message-----
>>> From: Laura Creighton [mailto:lac at strakt.com] 
>>>       
>  
>   
>>> And I think he will like tens of thousands of threads, too, 
>>> though if these just means tens of thousands of chances to 
>>> modify only part of your complex number, when you wanted an 
>>> atomic action guaranteed to modify both parts as one, then 
>>> he may hate it before he likes it. :-)
>>>       
>
> Sorry  - I suspect everyone else is quite done with this, but I'm still
> bothered by mixed signals.
>
> I would like to be able to present PyGeo as good, sensible code.  Not Museum
> Quality, to be sure. But good and responsible.
>
> There is an implication in what you are saying that I am still off the mark.
> Perhaps I am.  But its not fair, in my mind, to throw that at me knowing
> that it still has not gotten through to me (and Zelle ?) in what way I am
> off the mark.
>
> For the life of me I don't see the problem.  My class has 2 __slots__ -
> .real and .imag. It does with them the kind of things that classes do.  
>
> How is this class different and less thread safe than an infinite number of
> other classes that do with attributes the kinds of things that classes do
> with attributes?
>   
This is a complex matter and I'll try to give a very short (hence a 
little categoric) answer.
First of all, IMO Laura was referring to several thousands of 
lightweight thread such as those found in the Oz/Mozart language 
(http://www.mozart-oz.org). And that is because we have had a PyPy/Oz 
sprint two weeks ago where we made plans and prototypes for the 
integration of some ideas of Mozart into PyPy (mostly logic variables, 
"search", and constraint programming, micro-threads were already on the go).

In that language stateful datatypes such as mutable objects are an 
exception.
By default the variable store is a single assignment  store. That means 
when you create a variable (e.g. with this statement  X=_ ) it is 
uninitialized (called unbound). Then when you assign it you cannot 
rebind it to an other value: X=4 works but if you do X=5 later you get a 
sort of exception (failure). In a sense = does not do assignment but 
true mathematical equality (called unification). So you can do 4=X as 
well as 1+X = 5.
The language supports very lightweight threads (having a million of 
those is no problem), when they try to "use" the value of a variable , 
they block if the variable is unbound.  So you can launch 
inter-dependant threads accessing values computed by each others without 
wondering about the synchronization. That is called dataflow concurrency.

In a sense, your mutable complex object is opposite to that approach 
where (almost) all variables never ever change their value.
> I have unintentionally stimulated a CS  nerve, apparently.  But would still
> love to get to the bottom of issue.
>   
HTH :-)
> Or get an official CS - proper use case aside - bill of health.
>   
I would refer you to the CTM book: 
http://www2.info.ucl.ac.be/people/PVR/book.html
You will find there lots of interresting ideas about computer language 
semantics.


Best,
--
Grégoire Dooms



More information about the Edu-sig mailing list