Re: The meaning of a = b in object oriented languages

2007-09-20 Thread John W. Kennedy
Russell Wallace wrote:
> Summercool wrote:
>> so most or all object oriented language do assignment by reference?
>> is there any object oriented language actually do assignment by
>> value?  I kind of remember in C++, if you do
>>
>> Animal a, b;
>>
>> a = b will actually be assignment by value.
>> while in Java, Python, and Ruby, there are all assignment by
>> reference.  ("set by reference")
>>
>> Is that the case: if a is an object, then b = a is only copying the
>> reference?
> 
> Yes, your understanding is exactly correct; C++ will assign by value 
> unless you explicitly use pointers, but the other languages will assign 
> by reference (except for primitive types).

Ada also assigns by value absent explicit use of access variables 
(similar to pointers or references).

The question, in fact, is meaningless. Java has a certain defined 
behavior. C++ has a certain defined behavior. Smalltalk has a certain 
defined behavior. LISP has a certain defined behavior. Ada has a certain 
defined behavior. Object-oriented languages as a class do not.
-- 
John W. Kennedy
"The poor have sometimes objected to being governed badly; the rich have 
always objected to being governed at all."
   -- G. K. Chesterton.  "The Man Who Was Thursday"
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The meaning of a = b in object oriented languages

2007-09-19 Thread Lew
Lew wrote:
>> Java is a strongly-typed, compiled language which means it does more
>> static type checking and thus would reject treating a as both an array
>> and a String.
>>   In that environment the programmer must choose one or the other.

Ken Bloom wrote:
> In this Java example, a and b are statically typed to be of type Object. 
> Both Strings and Arrays [sic] descend from Object. (And primatives [sic] like 
> integers and the like will be autoboxed into descendants of Object).

That doesn't make Strings and arrays assignment compatible, and besides, it 
isn't so.

It was not stated by the OP that they were statically typing the variable to 
Object.  In fact, their example used a type "Animal".  They also used the 
syntax "a[1]", which is not possible in Java with a variable of type Object. 
So clearly a and b are /not/ statically typed to Object.

Unless you meant "/if/ a and b are statically typed [to] Object" that the 
assignment will work, which is true but of sharply limited usefulness.

In that case, you are a) defeating Java's type system and b) not getting the 
benefit of the Stringness or arrayness of the variable.  This is in contrast 
to the dynamically-typed languages wherein the variable will behave like an 
object of the runtime type, unlike in Java.

Back to the OP's example:
Summercool wrote:
>> so that's why  a[1] = "foobar"  will change what b will display, but 
>> a = "foobar" will not change what b will display.

Again, this cannot be done in Java.  The same variable a cannot be set to a 
String and still be used with array syntax.

-- 
Lew
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The meaning of a = b in object oriented languages

2007-09-19 Thread Ken Bloom
On Tue, 18 Sep 2007 18:02:59 -0400, Lew wrote:

> Summercool wrote:
>> when a writing or a book reads "a is a Hash object; a is an Array
>> object; or a is an Animal object" it is just a short form to say that
>> "a is a reference to that object."
>> 
>> b = a means "whatever a is referencing to, now b is referencing it
>> too".
>> 
>> so that's why  a[1] = "foobar"  will change what b will display, but a
>> = "foobar" will not change what b will display.
> 
> You can't do both in Java.  Is a an array or a String?  If a is a String
> and b is an array, then neither `a = b' nor `b = a' will compile in
> Java.
> 
> Java is a strongly-typed, compiled language which means it does more
> static type checking and thus would reject treating a as both an array
> and a String.
>   In that environment the programmer must choose one or the other.

In this Java example, a and b are statically typed to be of type Object. 
Both Strings and Arrays descend from Object. (And primatives like 
integers and the like will be autoboxed into descendants of Object).




-- 
Ken Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The meaning of a = b in object oriented languages

2007-09-19 Thread Roel Schroeven
Lew schreef:
> Roel Schroeven wrote:
>> Laurent Pointal schreef:
>>> Summercool a écrit :
>>>> The meaning of  a = b  in object oriented languages.
>>>> 
>>> 
>>>
>>> Oups, reading the subject I thought it was a Xah Lee post.
>> me too ...
> 
> Nah, this dude's all right, so far.  As if my opinion mattered.
> 
> Stay with it, Summercool.  It's what discussion groups are for.
> 
> Here's why the reaction: cross-posting of computer-science-type essays, 
> something Xah Lee does.  But he recycles all his decades-old crap and really 
> doesn't participate in the discussion.  This isn't that at all.

I fully agree and I didn't in any way mean to compare Summercool to Xah 
Lee. My apologies to Summercool if anyone interpreted it that way.

It's just that somehow the subject seems to follow the same template as 
what I've become used to from Xah Lee. I almost skipped reading the post 
because of that. Once I started reading it though, it became immediately 
clear that it was not comparable to Xah Lee's postings in any way, shape 
or form.

-- 
The saddest aspect of life right now is that science gathers knowledge
faster than society gathers wisdom.
   -- Isaac Asimov

Roel Schroeven
-- 
http://mail.python.org/mailman/listinfo/python-list

Re: The meaning of a = b in object oriented languages

2007-09-18 Thread Bryan Olson
Jim Langston wrote:
> Assignment operators in C++ should attempt to prevent two pointers poining 
> to the same memory location.  Consier a simple class (untested):
> 
> class Foo
> {
> public:
>char* Data;
>int DataSize;
>Foo( int Size ): DataSize( Size ) { Data = new char[Size]; }
>~Foo() { delete Data[]; }
> };

[...]
>Foo& operator=( const Foo& rhs )
>{
>   delete[] Data;
>   Data = new char[rhs.DataSize];
>   memcpy( Data, rhs.Data, rhs.DataSize );
>   DataSize = rhs.DataSize;
>}
> 
> You can see that we have to manually do some things.  We have to delete[] 
> our pointer, new a new buffer, copy the cotents, copy the DataSize over, 
> none of which the default assignment operator would of done.
[...]
> Incidently, there may be errors in the code I've shown here if you attempt 
> to compile it. Be forewarned. 

There's the "self-assignment" bug. See the popular C++ FAQ.

Follow-ups to comp.lang.c++
-- 
--Bryan
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The meaning of a = b in object oriented languages

2007-09-18 Thread Terry Reedy

"Summercool" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]

In Python, names are names.  They get associated with or bound to objects.

b=

means associate name b with the object resulting from evaulating the 
expression.  So

b = a

means associate b with the object 'currently' bound to a.

Your discussion of pointers, bytes, and integer-addressed memory locations 
is correct as to the CPython implementation of Python.  But these are not 
part of the semantics of Python itself as an algorithm language.  Unlike 
with C, we humans can read, understand, and execute Python code without 
mentally simulating a linear-memory computer.  That is part of what makes 
it easier to read.

Terry Jan Reedy



-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The meaning of a = b in object oriented languages

2007-09-18 Thread Lew
Roel Schroeven wrote:
> Laurent Pointal schreef:
>> Summercool a écrit :
>>>
>>> The meaning of  a = b  in object oriented languages.
>>> 
>> 
>>
>> Oups, reading the subject I thought it was a Xah Lee post.
> 
> me too ...

Nah, this dude's all right, so far.  As if my opinion mattered.

Stay with it, Summercool.  It's what discussion groups are for.

Here's why the reaction: cross-posting of computer-science-type essays, 
something Xah Lee does.  But he recycles all his decades-old crap and really 
doesn't participate in the discussion.  This isn't that at all.

-- 
Lew
-- 
http://mail.python.org/mailman/listinfo/python-list

Re: The meaning of a = b in object oriented languages

2007-09-18 Thread Lew
Summercool wrote:
> when a writing or a book reads "a is a Hash object; a is an Array
> object; or a is an Animal object" it is just a short form to say that
> "a is a reference to that object."
> 
> b = a means "whatever a is referencing to, now b is referencing it
> too".
> 
> so that's why  a[1] = "foobar"  will change what b will display, but
> a = "foobar" will not change what b will display.  

You can't do both in Java.  Is a an array or a String?  If a is a String and b 
is an array, then neither `a = b' nor `b = a' will compile in Java.

Java is a strongly-typed, compiled language which means it does more static 
type checking and thus would reject treating a as both an array and a String. 
  In that environment the programmer must choose one or the other.

Otherwise what you say is exactly correct.

> (because a[1] = "foobar" says "what is  a  referencing?  go there and change 
> its
> content that has the index 1"  and when b goes there to see it, it is
> also changed.)

Speaking just of Java, it's useful to distinguish a variable from an object 
(instance).  As you point out, the variable represents a reference to the 
instance.  The variable has a compile-time type in Java, which may be 
different from the run-time type of the object, albeit compatible.

C++ is similar in this respect.  Python and Ruby are more, shall we say, 
flexible in their type systems.

Both jet liners and hang gliders have their uses, both are flight, and neither 
is really suitable for the other's purpose.

-- 
Lew
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The meaning of a = b in object oriented languages

2007-09-18 Thread Aahz
In article <[EMAIL PROTECTED]>,
Laurent Pointal  <[EMAIL PROTECTED]> wrote:
>Summercool a écrit :
>> 
>> The meaning of  a = b  in object oriented languages.
>> 
>
>
>Oups, reading the subject I thought it was a Xah Lee post.

...and you're perpetuating the impression by continuing the crossposting.  
Please don't.
-- 
Aahz ([EMAIL PROTECTED])   <*> http://www.pythoncraft.com/

The best way to get information on Usenet is not to ask a question, but
to post the wrong information.
-- 
http://mail.python.org/mailman/listinfo/python-list

Re: The meaning of a = b in object oriented languages

2007-09-18 Thread Roel Schroeven
Laurent Pointal schreef:
> Summercool a écrit :
>>
>> The meaning of  a = b  in object oriented languages.
>> 
> 
> 
> Oups, reading the subject I thought it was a Xah Lee post.

me too ...

-- 
The saddest aspect of life right now is that science gathers knowledge
faster than society gathers wisdom.
   -- Isaac Asimov

Roel Schroeven
-- 
http://mail.python.org/mailman/listinfo/python-list

Re: The meaning of a = b in object oriented languages

2007-09-18 Thread Laurent Pointal
Summercool a écrit :
> 
> 
> The meaning of  a = b  in object oriented languages.
> 


Oups, reading the subject I thought it was a Xah Lee post.


;-)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The meaning of a = b in object oriented languages

2007-09-18 Thread Gabriel Genellina
En Tue, 18 Sep 2007 03:57:36 -0300, Summercool <[EMAIL PROTECTED]>  
escribi�:

> i think the line
>
> a = "different"
>
> means a is now set to a pointer to the String object with content
> "different".
> or that "a is now a reference to the String object."
>
> and b is still a reference to the Array object.  so that's why a and b
> print out different things.  they point to different objects.
>
> i think:
>
> whenever in Ruby, Python, and Java,
>
> a is never an object.  a is always a "reference to an object"...  this
> will solve a lot of puzzles when we don't understand some code
> behaviors.

Yes, but extrapolating that to "In OOPL, a=b just copies a reference" is  
wrong.
"Old" languages like Fortran use the "boxed" model, and "modern" languages  
tend to use the "reference" model, and since OO languages are younger...
But this rather old post by Alex Martelli explains it better  


-- 
Gabriel Genellina

-- 
http://mail.python.org/mailman/listinfo/python-list

Re: The meaning of a = b in object oriented languages

2007-09-18 Thread Summercool
On Sep 17, 11:04 pm, Lloyd Linklater <[EMAIL PROTECTED]> wrote:
> SpringFlowers AutumnMoon wrote:
> > Is that the case: if a is an object, then b = a is only copying the
> > reference?
>
> That and it adds a counter.
>
> a = ["foo", "bar"]
> b = a
> b[0] = "bite me"
> p a, b
>
> a = "different"
> p a, b
>
> ***
>
> In the first print, we get
> ["something else", "bar"]
> ["something else", "bar"]
>
> showing that changing b changes a, as expected.  However, if we change
> a, b is NOT changed as seen in the second print.
>
> "different"
> ["something else", "bar"]
>
> That means that there is a counter inside that says to separate the two
> or b would have changed with a as a changed with b initially.

i think the line

a = "different"

means a is now set to a pointer to the String object with content
"different".
or that "a is now a reference to the String object."

and b is still a reference to the Array object.  so that's why a and b
print out different things.  they point to different objects.

i think:

whenever in Ruby, Python, and Java,

a is never an object.  a is always a "reference to an object"...  this
will solve a lot of puzzles when we don't understand some code
behaviors.

when a writing or a book reads "a is a Hash object; a is an Array
object; or a is an Animal object" it is just a short form to say that
"a is a reference to that object."

b = a means "whatever a is referencing to, now b is referencing it
too".

so that's why  a[1] = "foobar"  will change what b will display, but
a = "foobar" will not change what b will display.  (because a[1] =
"foobar" says "what is  a  referencing?  go there and change its
content that has the index 1"  and when b goes there to see it, it is
also changed.)


-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The meaning of a = b in object oriented languages

2007-09-17 Thread Ben Finney
Summercool <[EMAIL PROTECTED]> writes:

> I just want to confirm that in OOP, if a is an object, then b = a is
> only copying the reference.

Whether the language is OO or not has no bearing on this question. The
semantics of the assignment operator can and do differ between
languages, orthogonal to whether OOP is involved.

-- 
 \ "Our task must be to free ourselves from our prison by widening |
  `\our circle of compassion to embrace all humanity and the whole |
_o__)   of nature in its beauty." —Albert Einstein |
Ben Finney
-- 
http://mail.python.org/mailman/listinfo/python-list

Re: The meaning of a = b in object oriented languages

2007-09-17 Thread Russell Wallace
Summercool wrote:
> so most or all object oriented language do assignment by reference?
> is there any object oriented language actually do assignment by
> value?  I kind of remember in C++, if you do
> 
> Animal a, b;
> 
> a = b will actually be assignment by value.
> while in Java, Python, and Ruby, there are all assignment by
> reference.  ("set by reference")
> 
> Is that the case: if a is an object, then b = a is only copying the
> reference?

Yes, your understanding is exactly correct; C++ will assign by value 
unless you explicitly use pointers, but the other languages will assign 
by reference (except for primitive types).

-- 
"Always look on the bright side of life."
To reply by email, replace no.spam with my last name.
-- 
http://mail.python.org/mailman/listinfo/python-list


The meaning of a = b in object oriented languages

2007-09-17 Thread Summercool



The meaning of  a = b  in object oriented languages.


I just want to confirm that in OOP, if a is an object, then b = a is
only copying the reference.

(to make it to the most basic form:

a is 4 bytes, let's say, at memory location 0x1000 to 0x1003

b is 4 bytes, let's say, at memory location 0x2000 to 0x2003

in 0x1000 to 0x1003, it is the value 0xF000, pointing to
an object

b = a just means
copy the 4 bytes 0xF0 0x00 0x00 0x00 into 0x2000 to 0x203
so that b now points to 0xF000 which is the same object.)


so essentially, a is just a pointer to an object.

and b = a just means that put that same pointer into b.

and that's why in Python or Ruby, it is like:

>>> a = {"a" : 1, "b" : 2}
>>> b = a
>>> a
{'a': 1, 'b': 2}
>>> b
{'a': 1, 'b': 2}
>>> a["a"] = 999
>>> a
{'a': 999, 'b': 2}
>>> b
{'a': 999, 'b': 2}

so most or all object oriented language do assignment by reference?
is there any object oriented language actually do assignment by
value?  I kind of remember in C++, if you do

Animal a, b;

a = b will actually be assignment by value.
while in Java, Python, and Ruby, there are all assignment by
reference.  ("set by reference")

Is that the case: if a is an object, then b = a is only copying the
reference?

-- 
http://mail.python.org/mailman/listinfo/python-list