Modifying Class Object

S

Steven D'Aprano

Yes, I do count this as a personal attack and flaming.

The litmus test for that is that it says something very negative about
the person you're debating with.

As negative as accusing somebody of intentionally lying?

Or is it only a personal attack when other people dare to disagree with
Alf P. Steinbach?

In addition, your statement about the earlier attacks on me, is untrue,
and your implication that it's only about attacks on me, is untrue. Both
of which are very misleading, by the way. I'm assuming that you're
intentionally lying.

Get over yourself. You're not so important that everyone is falling over
themselves to discredit you by intentional lying.

You do bring some technical knowledge and perspectives that is valuable to
this community, but it comes with so much spikiness, near-paranoia and
Freudian projection that it is extremely unpleasant dealing with you.

Since you first came to this community, you have displayed a remarkable
ability to take personal offence at virtually every disagreement, a
deeply paranoid viewpoint that whenever somebody contradicts your
statements they are deliberately lying, and a level of arrogance that is
outstanding even for computer science. (How sure of yourself do you have
to be to write a textbook for beginners in a language that you yourself
are a self-professed beginner in?)

I note with interest that this is not the only forum where your reaction
to disagreement is to accuse others of deliberate lying. It is a habit of
yours, and you've displayed it frequently and repeatedly. For example:

http://coding.derkeiler.com/Archive/General/comp.programming/2006-08/msg00139.html

http://www.embeddedrelated.com/usenet/embedded/show/43780-20.php

http://groups.google.am/group/comp.lang.c++/browse_thread/thread/555331f8dd594837

I'm no longer willing to tolerate the unpleasant attitudes you
display. So congratulations Alf. I've only kill-filed one other person on
this newsgroup until now. You are now the second. I may reverse it some
time in the future, but for now I'm just not interested in your paranoid
accusations that others are lying about you and your continual misuse of
the term "ad hominem" to refer to any and all criticism of your behaviour.

*plonk*
 
A

Alf P. Steinbach

* Steven D'Aprano:
As negative as accusing somebody of intentionally lying?

Or is it only a personal attack when other people dare to disagree with
Alf P. Steinbach?

Do you mean that everybody else is allowed to get personal, but I, in return, am
not so allowed?

Get over yourself. You're not so important that everyone is falling over
themselves to discredit you by intentional lying.

This implies something about my beliefs about my importance, that is, it is
clearly intended as an ad hominem attack.

I'm getting a bit tired of that.


You do bring some technical knowledge and perspectives that is valuable to
this community, but it comes with so much spikiness, near-paranoia and
Freudian projection that it is extremely unpleasant dealing with you.

Since you first came to this community, you have displayed a remarkable
ability to take personal offence at virtually every disagreement,

That is not true.

I do take offense at pure personal attacks, though.

Personal attacks are about person, technical discussion is about technical things.


a deeply paranoid viewpoint that whenever somebody contradicts your
statements they are deliberately lying,

That's just stupid, sorry.

Being paranoid is not about being attacked, or about pointing out when someone's
lying.

Hello.

and a level of arrogance that is
outstanding even for computer science. (How sure of yourself do you have
to be to write a textbook for beginners in a language that you yourself
are a self-professed beginner in?)

I note with interest that this is not the only forum where your reaction
to disagreement is to accuse others of deliberate lying.

Your argument gets a bit circular.


It is a habit of yours,

That is untrue.

and you've displayed it frequently

No, that is untrue.

and repeatedly.

Yes, I have repeatedly pointed when people have been lying, citing the evidence
and logic leading to that conclusion.

I wouldn't just "accuse" someone of something like that.

It's far too serious (however, above you're happy with accusing me of being
paranoid and whatever, so I conclude that you have no such qualms).


Yes, I've been on the net a long time, and consequently I have been involved in
flame wars. :)[1]

That is no excuse for your behavior.

An extremely long thread dedicated to the notion that there are no references in
Python (which is blatantly false), coupled with personal attacks on the one
person arguing that there are. I could easily think that you were having me on.
Of course most anyone else who'd hold the rational opinion would not join the
battlefield, because it clearly wasn't and isn't about convincing or educating
anyone, but I feel that follow-ups to my articles should be answered.


Cheers & hth.,

- Alf


Notes:
[1] Like one here where some guy A objects to some other guy B's use of the
term "portable assembler" about C, where at first I try to defend B's point of
view, since it is after all one employed even by the creators of C. B sensibly
opts out of the discussion while I stay on, predictable result. Another flame
war is with some functional programming fanatic, and a third with a known troll.
 
S

Steve Holden

Alf P. Steinbach wrote:
[...]
Of course most anyone else who'd hold the
rational opinion would not join the battlefield, because it clearly
wasn't and isn't about convincing or educating anyone, but I feel that
follow-ups to my articles should be answered.
In other words, you must have the last word, a behavioral characteristic
I will avoid drawing the obvious conclusions about for fear of begin
accused (yet again) of making ad hominem attacks.

I suppose you will therefore be unable to resist the temptation to
respond to this. Though I'd love to be proved wrong again.

regards
Steve
 
M

Mark Lawrence

Alf said:
* Steven D'Aprano:
As negative as accusing somebody of intentionally lying?

Or is it only a personal attack when other people dare to disagree
with Alf P. Steinbach?

Do you mean that everybody else is allowed to get personal, but I, in
return, am not so allowed?

Get over yourself. You're not so important that everyone is falling
over themselves to discredit you by intentional lying.

This implies something about my beliefs about my importance, that is, it
is clearly intended as an ad hominem attack.

I'm getting a bit tired of that.


You do bring some technical knowledge and perspectives that is
valuable to
this community, but it comes with so much spikiness, near-paranoia and
Freudian projection that it is extremely unpleasant dealing with you.

Since you first came to this community, you have displayed a
remarkable ability to take personal offence at virtually every
disagreement,

That is not true.

I do take offense at pure personal attacks, though.

Personal attacks are about person, technical discussion is about
technical things.


a deeply paranoid viewpoint that whenever somebody contradicts your
statements they are deliberately lying,

That's just stupid, sorry.

Being paranoid is not about being attacked, or about pointing out when
someone's lying.

Hello.

and a level of arrogance that is outstanding even for computer
science. (How sure of yourself do you have to be to write a textbook
for beginners in a language that you yourself are a self-professed
beginner in?)

I note with interest that this is not the only forum where your
reaction to disagreement is to accuse others of deliberate lying.

Your argument gets a bit circular.


It is a habit of yours,

That is untrue.

and you've displayed it frequently

No, that is untrue.

and repeatedly.

Yes, I have repeatedly pointed when people have been lying, citing the
evidence and logic leading to that conclusion.

I wouldn't just "accuse" someone of something like that.

It's far too serious (however, above you're happy with accusing me of
being paranoid and whatever, so I conclude that you have no such qualms).


Yes, I've been on the net a long time, and consequently I have been
involved in flame wars. :)[1]

That is no excuse for your behavior.

An extremely long thread dedicated to the notion that there are no
references in Python (which is blatantly false), coupled with personal
attacks on the one person arguing that there are. I could easily think
that you were having me on. Of course most anyone else who'd hold the
rational opinion would not join the battlefield, because it clearly
wasn't and isn't about convincing or educating anyone, but I feel that
follow-ups to my articles should be answered.


Cheers & hth.,

- Alf


Notes:
[1] Like one here where some guy A objects to some other guy B's use of
the term "portable assembler" about C, where at first I try to defend
B's point of view, since it is after all one employed even by the
creators of C. B sensibly opts out of the discussion while I stay on,
predictable result. Another flame war is with some functional
programming fanatic, and a third with a known troll.

I'm intrigued by your comments over the last couple of weeks, as you
obviously know so much more about Python than people who have been
working on it and/or using it for the 20 odd years of the existence of
the language. Is it safe to assume that shortly you will be telling the
scientific community that Einstein was a complete bozo and that his
theory of relativity is crap, or that Stephen (Bob?) Hawking knows
nothing about the origins of the universe?

To put it another way, please stand up Alf, your voice is rather
muffled. And this isn't an ad hominem attack, whatever the hell that
means, I (NOTE I ) personally wish you'd bugger off and leave the
bandwidth to people who genuinely want to discuss Python, computing
algorithms, whatever.

And please do NOT bother to reply. Your pathetic smileys and/or HTH
garbage cut no ice with me. I'm quite simply staggered that the Python
community as a whole have shown far more patience than I have, otherwise
you'd have been shot down in seriously bad flames days ago.

To you, Alf, get stuffed.

To the rest of the Python community, thank you for doing a fantastic
job, I do appreciate it, and am currently in my own little way
attempting to put something back in.

Regards.

Mark Lawrence.
 
A

Alf P. Steinbach

* Mark Lawrence:
Alf said:
An extremely long thread dedicated to the notion that there are no
references in Python (which is blatantly false), coupled with personal
attacks on the one person arguing that there are. I could easily think
that you were having me on. Of course most anyone else who'd hold the
rational opinion would not join the battlefield, because it clearly
wasn't and isn't about convincing or educating anyone, but I feel that
follow-ups to my articles should be answered.
[snippety]

I'm intrigued by your comments over the last couple of weeks, as you
obviously know so much more about Python than people who have been
working on it and/or using it for the 20 odd years of the existence of
the language.

I don't.

On the other hand, it's a fallacy to think other people must be perfect.

The glossary of my Python 3.1.1 documentation defines

"Reference count:
The number of references to an object. [...]"

And so arguing against the existence of assignable references in Python would be
silly if it was a genuine technical discussion.

But I suspect that, in spite of my /first article's/ reference and frequent
later references to term definitions etc., many who posted in this thread
thought they were arguing against some other point of view, in the frenzy not
bothering to check out things or actually /read/ what they replied to.

So, as demonstrated, assuming that you were referring to people participating in
this thread, people who have used a language for 20 odd years can still be wrong
about something -- even when that something is utterly trivial.

Is it safe to assume that shortly you will be telling the
scientific community that Einstein was a complete bozo and that his
theory of relativity is crap, or that Stephen (Bob?) Hawking knows
nothing about the origins of the universe?

To put it another way, please stand up Alf, your voice is rather
muffled. And this isn't an ad hominem attack

Your response *is not* a personal attack?

Then why are you trying to imply all kinds of things about my person, and not
mentioning anything technical?

Is there anything in the above, about assignable references, that you really
think is on a par with relativity and requires Einstein's genius to understand?

, whatever the hell that
means, I (NOTE I ) personally wish you'd bugger off and leave the
bandwidth to people who genuinely want to discuss Python, computing
algorithms, whatever.

And please do NOT bother to reply. Your pathetic smileys and/or HTH
garbage cut no ice with me. I'm quite simply staggered that the Python
community as a whole have shown far more patience than I have, otherwise
you'd have been shot down in seriously bad flames days ago.

To you, Alf, get stuffed.

Are you sure that this is not a personal attack?

Just curious how you manage to think it couldn't be.


Cheers & hth., ;-)

- Alf
 
R

rantingrick

This entire thread has imploded like a neutron star into an infantile
debate that only Caddie Couric, Bill O Reilly, and everyone on PMS-NBC
can hold a candle to! The only post i enjoyed was Steve Howes!

From my unique perspective of not really knowing (or for that matter)
really caring about any of you i can say *some* of you have most
undoubly shown your true colors in this thread!

First of all, we all know how D Aprano has such an unfettered ego
problem. I myself have been the victom of his insults but
simultaniously also found them quite enjoyable (at times) I'd classify
Steven d'Aprano as a "well informed" arsehole with an inner clown
trying to escape.

Then there is "alex23". The only sockpuppet (of many suspects within
this group) that i can 100 percent prove and of whom i knew sooner or
later would come along for his chance at trolling. Just look at his GG
cache and you will see 99% of his post are argmentitve, abusive
trolls! He's a fish that waits for threads like these just so he can
flop around!

As for Alf, no he is not *tecnically* right about the definition of
"ad homine" but that *really* doesn't matter. He has (time and time
again) been personally attacked by some of the more "supposedly
respected" people in this group. And as always the roaches start
coming out of the woodwork in a most "pathetic puppy dog" way. What
would you puppets do if there were no one to pull your strings?

But the most nortoriuos behavior of all belongs to none other that the
PSF chairman himself! Yes "Steve Holden", you should be ashamed of
yourself! Your attacks have been more amd more destructive over the
past year or so. Even if your behavoir could "somehow" be justified
how can someone in your position lead the PSF and act as such an
infintile way? I am very ashamed of you Steve and you really owe Alf
(and the community at large) an apology although i doubt it will
happen because then your own people will turn against you.

I have documented the bad behavours of certain "pythonistas" on this
group for some time now. And my original assumtions that only a
handful of people really follow this group. Maybe one day we will have
a fair playing feild for all but sadly it looks to be more like a pipe
dream!

Sleep well kids!
 
D

Dennis Lee Bieber

This entire thread has imploded like a neutron star into an infantile
debate that only Caddie Couric, Bill O Reilly, and everyone on PMS-NBC
can hold a candle to! The only post i enjoyed was Steve Howes!
Unless she's taken to hauling golf clubs for Woods, I think the name
is Katie Couric <G>

{Hmm, I don't recall ever seeing a "rantingrick" on the group before...
could it be... a... "sockpuppet"?}
 
A

Aahz

Whether in CPython, Jython or IronPython the value returned by calling
id(x) (whether x is a literal, a simple name or a more complex
expression) is absolutely no use as an accessor: it does not give you
access to the referenced value.

If you disagree, please write (in any implementation you like: it need
not even be portable, though I can't imagine why ti wouldn't be) a
Python function which takes an id() value as its argument and returns
the value for which the id() value was provided.

IIRC, I've seen ctypes code that uses id() to get access to the object,
but (obviously) I don't think that invalidates your point[er].
 
M

Michael Sparks

Hi Alf,


Thanks for the effort at non-flaming discussion, it *is*
appreciated.

I would appreciate it if you tried to be non-flaming yourself,
since you can see I am not flaming you.

I was seeking to educate you on a simple matter which you seem
to be misunderstanding in python. This will be my second and
last attempt to do so since you chose to be inflammatory in your
response. (In case you do not understand what I find inflammatory,
I will discuss that at the end)

Please note below I may use CAPS occasionally. Whilst usually
taken as shouting, I mean them as BOLD. Please be aware of this :)

My reason for choosing to do reply is for the simple reason
that recently I had similar discussions with a colleague who was
likewise stuck talking about implementation aspects (call by
reference/value rather than call with object/sharing).
[ inflammatory comment snipped]

Good - common ground - a good starting point.

Now, if I define a language, this has 3 main parts:
* Syntax
* Semantics
* Implementation

The syntax of python is simply and shortly defined in a machine
readable format, and is therefore not interesting to discuss
here.

The implementation of python is similarly well defined. There are
multiple such implementations, one of which is CPython.
However, all those references to implementation aspects,
persisting
[ inflammatory comment snipped]

In theory when talking about a language, we do not need to talk
about implementation details. However when using a language,
implementation details do matter as well.

That's why people talk about implementation aspects. When talking
about how the language is defined, you need to talk about how the
language is defined. It's not defined in terms of Java pointers or
references. It's defined in terms of objects and names. (Or objects
and labels)

The exception to this is with pure functional language. In a pure
functional language I do not care about implementation details,
since they are outside the scope of the language.

It is worth noting that python and functional languages share a
common ethos - though with different conclusions - that optimising
for the programmers expression of the problem rather than for the
machine *matters*.

If you miss this, you will be stuck misunderstanding python,
pretty much forever. If you (the reader, not necessarily Alf)
understand this, good. If you don't, you need to re-read this
and really understand it.

(please bear in mind when I say "YOU" in that paragraph, I
mean "whomever is reading this", not anyone specific)

Let's get down to brass tacks.

In python, the LANGUAGE, there are no pointers or references,
much like in SML, haskell and friends there are no pointers or
references. I'm using SML here as an example, because it is
conceptually close to python in terms to some aspects of
evaluation and how it deals with names and values. (There
are many differences as well, but we're dealing with calling,
names & values, in which they are close enough)

Taking an example from SML:

structure Stk =
struct
exception EmptyStack;
datatype 'x stack = EmptyStack | push of ('x * 'x stack);
fun pop(push(x,y)) = y | pop EmptyStack = raise EmptyStack;
fun top(push(x,y)) = x | top EmptyStack = raise EmptyStack;
end;

This may be used, say from the interactive prompt, as follows:

val x = EmptyStack; (* 1 *)
val 'x = x; (* 2 *)
val y = push(5,'x); (* 3 *)
val z = push(4,y); (* 4 *)
top z; (* 5 *)

Now, in this example, in SML, there are only names and values.
Unlike python, all values are immutable, and theoretically, no
sequencing of statements.

Now line 1 takes the EmptyStack value, and the name x is bound
to it. Line 2 takes that same EmptyStack value, and the name 'x
is also bound to it.

There are no pointers in SML, just names and values.

Like python, SML has aliases. 'x for example is an alias for x.
However that is just a symbolic name for the object itself.

When line 3 is evaluated, the value push(5, 'x) is bound to the
name y. Note - push(5, 'x) is in itself a value in SML, because
it has been defined as such in the Datatype definition in the
structure definition Stk.

When we reach line 5, the function top is called with the value
that z is bound to. Not a reference. Not a pointer. The actual
value. In this case z's value is push(4,push(5,EmptyStack)).

Thus the SML runtime evaluates the expression
top push(4,push(5,EmptyStack))
And returns the value 4.

In python, I don't have such richness of ability to define values,
but I have these types play with:

* numbers - 1.0 , 1, 1+2i, 0x11 0777
* strings - "hello" "world"
* lists - ["hello", "world" ]
* tuples - ("hello", "world")
* dicts - {"hello" : "world" }

All of these types are defined in python as python objects. How
they are implemented is irrelevant. What is relevant is that
lists and dicts are mutable. The rest are not. (This mutability,
along with sequencing and iteration make python different from
the pure subset of SML.)

However, nonetheless when I type this:

def hello(world):
print world

hello("world")

When I call "hello", with the argument "world", the language
is DEFINED, that *just like SML* I am passing in that specific
object. Not a copy of a value (call by value). Not a reference
to the value. Not a pointer to a value. But that specific actual
object.

This isn't willy nilly or on a whim, that's a concious choice.

[ If this makes no sense, consider that python's history comes from
a CS department like SML's does, rather than from an engineering
department (ala C/C++/Java).


Now you might turn around and say (since you have in the thread)
"but in reality you're not _really_ passing in that object,
you're passing in a reference", you're wrong. If the language
defines it as passing in THAT object, then it defines it as
passing in THAT object.

But you can come back, as you have done, over and over and claim
that it's a pointer or a reference, and may even say things like
"well, according to this OTHER language's definition of this word,
I mean this".

That's nice, but ultimately broken.

Using another languages way of defining something is wrong.

In python it is *defined* as passing in the object. Not a reference.
Not a pointer. The object itself.

If it is a pointer or reference it has a value, and refers to a
value. Essentially 2 values in 1. This is part of the accepted
definition of pointer or reference. "A value that allows you to
find another value".

By claiming that in the below:

That stack is a reference to () and that stack_ is also a
reference to () _in python the language_, then I must be able
to get at the value of stack itself, and the value of stack_
itself.

You claim to be able to do this thus: 3078742060L

<type 'long'>

That value is an integer. Additionally, if these "id" values were
references, then I would be able to take those values and _inside
the language_ retrieve the value they refer to.

ie I would be able to type something like this to get this sort of
behaviour: ()

This means one of two things:
* Either "stack" by itself is a reference to (), but we
cannot get at the reference itself, just the value it
refers to.
* OR "stack" is the preferred way of dereferencing the
reference associated with stack, and to get at the actual
reference we do id(stack).

The problem is i) is incomplete in terms of being a reference,
since we can only get at the r-value. The other one is that
ii) is incomplete because we have no way of going from an l-value
to an r-value.

This means that *AS FAR AS THE LANGUAGE* is concerned whether
the implementation looks or acts like it's implemented as call
by reference or whatever, it is simpler and more correct to say
that as far as the *LANGUAGE* is concerned, you pass in the
object, which will be bound with a local name inside the function
or method.

Thus is is more correct to say that python the language only has
aliases.

By comparison, it's possible to demonstrate that Java does have
references, because it is possible to box and unbox values to/from
reference values:

http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#190697

Thus whilst Java's semantics may be similar, python's differ in
that Java, the language, has references and python, the language,
has aliases.

Now let's move to the implementation aspects.

Python as a language is implemented in many languages. One of these
is C. There are compilers to C (pypy), C++ (shedskin), for the JVM
(Jython) and .net (Ironpython).

There is also an executable operation semantics for python,
which can be found here:

http://gideon.smdng.nl/2009/01/an-executable-operational-semantics-for-python/

This set of operational semantics is written in Haskell.

Haskell is a strictly pure, lazily evaluated language. It
therefore has no pointers or references, just values and names.
The implementation therefore cannot be in terms of references
and pointers. Therefore to say "in reality the implementation
will be passing a reference or pointer" is invalid. There is
after all at least one implementation that does not rely on
such machine oriented language details.

What you find in terms of modelling the semantics, is that
implementation is seeking to model those of the python virtual
machine, and there that talks about values, objects, references
and the heap. However in terms of modelling how the language is
used this is not exposed at the language level.

Indeed the only test it uses with regard to references involves
the creation of a reference type _using_ python:

class Reference(object) :
pass

Creating a reference:
a = Ref()

Setting the value the reference refers to:
a.value = False

Passing the reference to a function, and changing the value the
reference:
def bar(ref):
ref.value = True

bar(a)

Whilst you might say "But that's wrong", note that .value on
the right hand side is used for unboxing the value - it's
syntactic sugar for a method call on the ref object.
Specifically, it's the result of doing ref.__getattr__("value").

Likewise, ref.value on the left hand side of an equals is
also syntactic sugar for boxing the value - specifically it's
syntactic sugar for ref.__setattr__("value", <whatever>)

That's the closest you can come to Java references in python -
since otherwise you have no way to box or unbox any values.
If you want to claim Python has java references with no ability
to box or unbox any values, then maybe that's vaguely OK, but
it's still _wrong_. You can claim it's LIKE java references, but
since python doesn't have references, only aliases, you'd be
wrong to claim they're the same as java references.

And from a language spec - semantics, not implementation
viewpoint - you'd also still be wrong because you can implement
python without calling the values references.

Specifically, the object model defined in src/Objects.lhs and
src/ObjectTheory.lhs in the above reference operational semantics
specification of python uses a functional heap to contain the
objects. New objects are created there thus:

rewrite (State
( heap )
envs stack ( FwApp (Prim "object" "__new__") (a_c:as) )) =
(state ( heap <+> [a |-> ObjValue (new [__class__ |-> a_c])
NoneValue] ) envs stack ( BwResult
a ))
where a = freeAddr heap

In this definition, which is compilable and executable (since it's
haskell), there are no references, pointers or memory allocation.

Thus to say that for this:

def hello(world)
print world

hello("world")

Saying that I *must* be passing in "world" by reference since
implementation requires this, is false. In *an* implementation
may do that, and indeed, it's the most obvious way of
*implementing* it in many languages, but to say the language
specifies it that way is incorrect.

After all, in the Haskell implementation for example, the
object itself is just passed in.

~~ interlude ~~

Now, if python DID add references, this would be pretty awesome
because it's the most obvious way of adding in software transactional
memory, since this usage of X.value is remarkably close to the way
I deal with values in my implementation of software transactional
memory for python which you'll find here:

* http://www.kamaelia.org/STM

And since python doesn't already have references, you wouldn't be
changing existing semantics.

This won't happen for a fair while at least for many reasons, not
least the fact that there's a moratorium on language changes at
present.

~~ end interlude ~~

Now if we return to CPython, we find that CPython is the most
commonly used implementation of python. As a result much python
code is written to work well with that implementation, rather
than with any other.

The CPython implementation has some limitations:
* It is written in C
* It cannot pass in actual objects (like haskell), only
primitive values.
* Therefore it has to pass in pointers to values to the parts
of the subsystem that do the evaluation.
* It has to track memory, and performs garbage collection.
* Since it tracks garbage, it uses the parlance of garbage
collection - specifically including references and reference
counts. A reference count is however just a count of "who
knows about this object and is keeping this alive")
* All memory allocation lives in the heap, and as a result
python objects sit there, and the implementation slings
around pointers to these things.
* Logically speaking (and at the language level), python
objects may contain other objects. Specifically, a list
may contain another object (or even itself). Both of
these types of relationship cause the reference counts
to increase.
* The program running tracks the objects using names, and
when an object stops being findable by another object
(eg no longer in a list, and no longer labelled by someone),
this is a trigger which the garbage collector can use to
decide to delete the object.

Given CPython is written in C, it becomes natural for CPython -
the implementation - to therefore start talking about objects,
pointers, references, reference counts and so on. Not only that
since no programmer really likes memory leaks etc, actually
knowing what the implementation is doing is *at times* useful
to know.

Since the language spec is tied up with a specific implementation,
some of these details leak into the language of the document.

So yes, as a pragmatic python programmer, I do care about reference
counts. I do care about weakrefs which don't increase reference
counts. I do care about when values are created and deleted.

However, I only do so because of the *implementation* not because
of the specification.

When it comes to talking about the language, saying "it's pointers"
over and over or saying "it's references" over and over or even
saying "it's references/pointers as defined by java" over and over
does NOT make it correct.

If you move forward and accept that python THE LANGUAGE uses names
and objects, and names are more like labels stuck onto objects
than names of boxes that objects can sit inside, you'll move
forward somewhat.

If you don't, that's fine, but stating your version of "truth" as
correct, when told many times you are incorrect is either ignorance,
arrogance, pigheadedness or stupidity.

I have chosen to believe it's ignorance, and assuming good faith.

Now, I did say I'd pick out the inflammatory parts of how you've
spoken to me, and I will just leave them as that. You will
hopefully see how they're inflammatory and modify your behaviour
in future.

Please note though, I will pick out one point. I was not using
Wikipedia as a means of argument by authority. I was using it as
a starting point for a discussion which I thought many could use
as a valid starting point - since whilst not perfect, and can be
highly inaccurate in places, it does form one of the few places
where people generally eventually reach some form of consensus.

The fact that you've previously editted, fine. Good. That's very
civic minded of you and I thank you for it.

The idea that somehow bringing in an acceptable definition from
some source that you've effectively stated you agree with as
valid (because you've editted it), somehow invalidates the meat
of my points I find a little bizarre. I'll put that down to
cultural differences.

Anyway, here's the points I find inflammatory, and rather than
respond, I'll leave them as is.

I'll also not be responding to any further mails containing
inflammatory comments. You can think this stupid or annoying,
but quite frankly, I don't see the point.

Hopefully nothing I have said above you personally find
inflammatory, if you do, I apologise in advance. I do hope
that my mail has moved your understanding of python calling
conventions on. I primarily do this because I hope that you
do not pass on your misunderstandings as fact, when in fact
they are not - because doing so would do others a disservice.

Regards,


Michael.

Inflammatory comments (from my personal viewpoint)
It would seem to readers that posters here do not grasp and are
unable to grasp that distinction.

The posters here do understand that distinction.
However, all those references to implementation aspects,
persisting in the face of corrections,

Stating something is a correction does not make that correction
true. If I state it's call by sharing, and that happens to be
the definition, then correcting me and calling it call by value
or call by reference does not make that correction true.

If you are told something repeatedly by many sources, perhaps
consider you may be wrong.
have just, IMHO, been consistent attempts at misrepresentation.

This can be taken as posters choosing to misrepresent your words,
and is equivalent to the question "When did you stop beating your
wife?", and equally offensive.
I'm sorry to disappoint, but no. It was a random Google hit to find
a first-year text that perhaps posters here could understand.

You have been talking to many people who have been around python
for sometime, including those who've worked on python's internals.
Assuming that they need "educating" as CS101 students is offensive.
Not insinuiting anything about heir mental prowess or lack
thereof,

No. It does - whether you like it or not. Communication is about
2 (or more) parties communicating. The sender of a message should
care more about how their message is recieved than how it is sent.
In my case, my goal of sending you a message was to educate.

Your goal APPEARS to have the purpose of defending a position you
hold strongly, to the extent of ignoring the effect on others. If
you think "That's their problem", then I can just correct you,
and then ignore you. If that's a misrepresentation of your goals,
then maybe telling you is helpful. I don't know.

I do know thoughI've made that sort of mistake in the past (not to
anyone here, but I have done), and realised my mistake and been
grown up enough to recognise my mistake and apologise.

I feel you have made that mistake here. Whether you apologise
is your call. I would.
but just something they might understand given a repeatedly
demonstrated inability to understand such basics, or even to
understand the concept of reference to a definition of a term.

No, they do not agree with you. This is not the same as not
understanding, or lacking the mental ability to understand
"basic terms".

If I said you lacked the ability to understand such basics
of human interaction, you'd probably be rather offended.
If, at the same time, I demonstrated a complete inability to
understand such basics myself, you would find such remarks
inflammatory.
Please do consider that my usage of the term "pointer" has
always, in this thread, including the first article I posted
in this thread, been with explicit reference to the Java
language spec's meaning.

I understand this. What you seem to misunderstand is that others
also understand this. They also understand that Pointer as viewed
from the Java Language Spec *IS* a different concept.

There may be similarities, but the fact that you can unbox and
rebox a Java Reference (as per reference above), where you *cannot*
in python because, well, you can't, IS a fundamentally different
concept.

Conceptually you pass in the object in python. Not the object.
Java has to say you pass in a reference because Java has the
concept of references which may be box and unbox values.
You may argue that those who wrote that language spec are
confused about things or whatever, but that's rather stretching
it, wouldn't you say?

No it isn't, there's others who claim exactly the same thing
about the Java Language Spec. In python, the language spec was
written by those who wrote CPython, therefore their terms are
clouded by concrete details. If they weren't, they'd use the
term aliases more often.

So, this must be the most silly "argument by authority"
ever offered.

This is inflammatory because you are deriding my premise as "silly"
because you have chosen to not ask yourself *why* I chose to use
that as a starting point, and then chose to ignore all my points
and arguments, deriding it as "silly".

That's rather inflammatory when someone is seeking to educate you
in the hope of making it such that you understand better and those
you come in contact with learn the correct semantics, rather than
what you think the semantics are, despite being told otherwise.
I find that amusing and would have included a smiley except that
I think that that would incur further flames.

Please not I have not flamed you. I have ignored your inflammatory
remarks except to note how I find them inflammatory towards myself
and others.

The assumption that I would flame you I do actually find relatively
offensive. I've stayed out of many flame wars for many years, and
generally find that seeking to understand why the opposing side in
an argument is saying what they do can actually often either resolve
differences or lead to an agreement to disagree.

Likewise I have tried to stay away from making suggestions as to
how you should change your behaviour since that could be considered
inflammatory by some.
It's no criticism of you; I do appreciate your effort, thanks.

This comes across as dismissive, given you ignored the entire body
of my mail, and decided to deride it as "silly".
And I reiterate that the meaning of "pointer" I have used is
the meaning in the Java language spec.

This assumes I have not read the thread. I have. I read the
statement above numerous times. I also however have read the
Java Language Spec (you are not the only person to have done
this of course), and do NOT agree with you.

Indeed I can see usecases where *adding* references to python,
the language, could be useful. However, since they're not there,
I can't.
And that that's about semantics, not about implementation,
and not about C pointers or Pascal pointers or whatever else
that some would rather wish it was.

Unfortunately, you have picked a language whose semantics for
references include the concept of being able to box and unbox
object references. You cannot do that in python. Boxing and
unboxing references is just another term for referencing and
dereferencing values. Again, something you can't do in python.

Again, by ignoring the meat of my argument and reiterating your
point, you come across as willfulling ignoring logical rational
arguments put your way in as non-inflammatory was as possible,
decrying all those who disagree with you as somehow stupid,
misrepresentational or ignorant.

By doing so, your mail as a whole is rather inflammatory, but
I've decided to only send one mail in reply to you and then
leave it at that.
In the following that I snipped you had good discussion except
for (as I could see) a fallacy-based denial of references
existing in Python.

No, it's not denial, it's an understanding of programming
languages borne from having used a wide variety of languages
from Assembler (Z80, 6502, 6800), BASIC, pascal, C, C++, Java,
COBOL, Occam, Fortran, Perl, Python, Ruby, E, SML, Haskell,
Prolog, Lisp, and several others I've probably forgotten I've
used now over well over a quarter of century of usage. I've
used languages which are reference only, object only, value
only, etc.

My conclusion that python is call by object sharing is based
on 8 years experience of using python, and changing my views
from early on viewing it as pointers/references to understand
that the semantics are much closer to that of an impure
functional language where you pass complex objects *themselves*
(from a _semantic_ perspective).

To claim that I am in "denial", somehow implies that I am either
inexperienced, stupid, or unwilling to call a hammer a hammer or
a screwdriver a screwdriver.

I'm not. I'm simply unwilling to call a hammer a screwdriver or
call a screw a nail.
I don't think there's any point in discussing that further,
because it's evidently a religious matter where rational
arguments

This is inflammatory, since you dismiss my arguments now as
religious rather than rational. I find that moderately disgusting
and offensive.
-- and I've tried a few

You have not appeared to try to understand where my argument
is coming from sadly, despite me doing the same for yours. You
have dismissed my disagreement as religious, rather than seeking
to understanding the rational argument you have been presented,
and have not argued against it.

I however am seeking to be precise, by choosing NOT to use terms
like reference, because they are incorrect.
-- don't reach, in spite of the extreme triviality of the
subject matter.

Far from being trivial, understanding that you cannot unbox
"the value" of a python object is rather fundamental to the
understanding of python. Understanding that you are passing
around (logically speaking) the actual object explains for
example why this style of coding confuses people when they
start with python:
... def __init__(self, store=[]):
... self.store = store
... def append(self, X):
... self.store.append(X)
... def pop(self):
... return self.store.pop()
... 10

The misunderstanding that people have is that they
assume that this:
... def __init__(self, store=[]):

Results in a new empty object being created every time, whereas
actually it's created at the point the def statement is run,
specifically here: ([],)

The fact I can get *an* object id thus:
>>> id(MyObject.__init__.im_func.func_defaults[0]) 3078510124L
>>> id(X.store) 3078510124L
>>> id(Y.store)
3078510124L

Is pretty irrelevant. It's not a reference - it's an opaque
value that happens to be useful when debugging for telling
whether I've got the same object or not. Otherwise the objects
themselves would have no default name, and no way of telling
if THIS list is different fron THAT list.

However, by understanding that the [] object is created when
the def statement is evaluated and the object reused by all
subsequent calls, rather than being created when the object
is called explains much more clearly WHY the code works the
way it does.

Yes, you can make a similar argument in terms of references,
and under the hood that's what happens with pointers to an
empty list object stored on the heap. However, in terms of
semantics, it's an actual python object, not a reference.

After all python is a HUMAN oriented language, not a machine
oriented language. A reference says "this thing over here".
An object is a thing. The latter is more HUMAN, the former
is machine oriented.
Thanks for the effort at non-flaming discussion,
it *is* appreciated.

It does not appear that way, since you have chosen to assume
that I don't understand the thrust of your arguments, rather
than disagree with them. You have chosen to assume that my
arguments are wrong and used or made for religious reasons
rather than rational ones - such as the desire to be precise.

I sincerely hope that my reply does not offend or inflame you,
since that is not the intent. I do hope it educates you and
puts into context the responses you have gained from others.

After all, one simply shouting in a corner saying "YOU'RE
ALL WRONG, WRONG, WRONG. I'M RIGHT RIGHT RIGHT", when one
does not to understand what one is talking about does not
tend to engender warm fluffy feelings or sentiments of
authority towards such an individual. Be it me, you, or
anyone else.

At the moment, you appear to me to be engaging in such a
behaviour. Now you don't know from Jack and probably don't
care about my viewpoint, but I would really appreciate it
if you would try not to be inflammatory in your response
to this. (Since you do appear to also have a need to have
the last word)

Hoping this was useful on some level,


Michael.
 
A

Alf P. Steinbach

* Aahz:
IIRC, I've seen ctypes code that uses id() to get access to the object,

Dino Viehland gave this code:

True
</quote>



but (obviously) I don't think that invalidates your point[er].

For my part I didn't think the above would be possible without enumerating all
objects. I'm guessing that Steve didn't think so either. However, I seriously
doubt that an agreement with my earlier statements of that was his point,
considering the "if" above, which seems to imply to the reader that instead I'd
argued what he's challenging.

Perhaps Steve was just confused.

My original statement, with reference to the Java language spec, didn't say much
more about the language than that it has assignable references.

It took a long time to get the wild horses reined in in that direction.

But then two others ended up arguing that Python does not have references, with
one of them maintaining that "refers to" in the language spec does not mean
"refers to", but instead means "refers to", so I'm guessing it's religious, yes?


Cheers,

- Alf
 
A

Alf P. Steinbach

* Michael Sparks:[Due to the appearance of reasoned discussion (it's not practical to read it
all!), I felt it necessary to respond. It turned out to be a long sequence of
trivial fallacies, peppered with various allegations and insinuations.]


[snip extremely much]
Now let's move to the implementation aspects.

Python as a language is implemented in many languages. One of these
is C. There are compilers to C (pypy), C++ (shedskin), for the JVM
(Jython) and .net (Ironpython).

There is also an executable operation semantics for python,
which can be found here:

http://gideon.smdng.nl/2009/01/an-executable-operational-semantics-for-python/

This set of operational semantics is written in Haskell.

Haskell is a strictly pure, lazily evaluated language. It
therefore has no pointers or references, just values and names.
The implementation therefore cannot be in terms of references
and pointers.

At this point consider whether it's possible to implement Pascal in Haskell.

If it is possible, then you have a problem wrt. drawing conclusions about
pointers in Pascal, uh oh, they apparently can't exist.

But if it is not possible to implement Pascal in Haskell, then Haskell must be
some etremely limited special-purpose language, not Turing complete -- is that
acceptable to you?

Therefore to say "in reality the implementation
will be passing a reference or pointer" is invalid. There is
after all at least one implementation that does not rely on
such machine oriented language details.

I'm sorry, but see above: in itself it's just yet another a fallacy.

And as an argument in a debate with me it's misrepresenting.

There is need to talk about "in reality" (as if the language spec and general
semantics isn't real enough) nor to talk about any specific implementation.


[snip very much]
I sincerely hope that my reply does not offend or inflame you,
since that is not the intent. I do hope it educates you and
puts into context the responses you have gained from others.

After all, one simply shouting in a corner saying "YOU'RE
ALL WRONG, WRONG, WRONG. I'M RIGHT RIGHT RIGHT", when one
does not to understand what one is talking about does not
tend to engender warm fluffy feelings or sentiments of
authority towards such an individual. Be it me, you, or
anyone else.

At the moment, you appear to me to be engaging in such a
behaviour. Now you don't know from Jack and probably don't
care about my viewpoint, but I would really appreciate it
if you would try not to be inflammatory in your response
to this. (Since you do appear to also have a need to have
the last word)

Hoping this was useful on some level,

Yes.

I elected to respond to just /one/ of the many arguments you presented.

The other arguments, about why there are no references in Python, shared,
however, the basic property of being logical fallacies packaged in kilometers of
rambling text.


Cheers,

- Alf
 
S

Steve Holden

Alf said:
* Michael Sparks:
[Due to the appearance of reasoned discussion (it's not practical to read it all!) [...]
Therefore to say "in reality the implementation will be passing a
reference or pointer" is invalid. There is after all at least one
implementation that does not rely on such machine oriented language
details.

I'm sorry, but see above: in itself it's just yet another a fallacy.

And as an argument in a debate with me it's misrepresenting.
I see we are still all out of step with you. If it's a fallacy then I'd
like to see a reasoned logical explanation of its fallaciousness.

As far as I can see, if someone says "implementing Python implies the
use of pointers" as you appear to be doing, then Michael's argument
neatly demolishes that argument by providing a counter-example: there is
an implementation of Python that does not use pointers.

You, however, dismiss this as a fallacy, and suggests it somehow
misrepresents you. And yet you wonder why people call your behavior (not
you) paranoid.

[...]
Yes.

I elected to respond to just /one/ of the many arguments you
presented.

The other arguments, about why there are no references in Python,
shared, however, the basic property of being logical fallacies
packaged in kilometers of rambling text.
And you can say this without, by your own admission, even reading it. It
makes me wonder why we have paid you the compliment of engaging you in
debate, since this is the most transparent evidence to date that what
comes back will be unrelated to the arguments presented.

regards
Steve
 
A

Alf P. Steinbach

* Steve Holden:
Alf said:
* Michael Sparks:
[Due to the appearance of reasoned discussion (it's not practical to read it all!) [...]
Therefore to say "in reality the implementation will be passing a
reference or pointer" is invalid. There is after all at least one
implementation that does not rely on such machine oriented language
details.
I'm sorry, but see above: in itself it's just yet another a fallacy.

And as an argument in a debate with me it's misrepresenting.
I see we are still all out of step with you.

Why did you snip the short argument?

If it's a fallacy then I'd
like to see a reasoned logical explanation of its fallaciousness.

Oh, you snipped it so that you didn't have to present it to readers.

That's dishonest, Steve Holden.

Requoting:

> Now let's move to the implementation aspects.
>
> Python as a language is implemented in many languages. One of these
> is C. There are compilers to C (pypy), C++ (shedskin), for the JVM
> (Jython) and .net (Ironpython).
>
> There is also an executable operation semantics for python,
> which can be found here:
>
> http://gideon.smdng.nl/2009/01/an-executable-operational-semantics-for-python/
>
> This set of operational semantics is written in Haskell.
>
> Haskell is a strictly pure, lazily evaluated language. It
> therefore has no pointers or references, just values and names.
> The implementation therefore cannot be in terms of references
> and pointers.

At this point consider whether it's possible to implement Pascal in Haskell.

If it is possible, then you have a problem wrt. drawing conclusions about
pointers in Pascal, uh oh, they apparently can't exist.

But if it is not possible to implement Pascal in Haskell, then Haskell must be
some etremely limited special-purpose language, not Turing complete -- is that
acceptable to you?
As far as I can see, if someone says "implementing Python implies the
use of pointers" as you appear to be doing, then Michael's argument
neatly demolishes that argument by providing a counter-example: there is
an implementation of Python that does not use pointers.

That's meaningless.

But then so is maintaining that Python doesn't have references.

And so is your argument applied to Pascal, just to mention that again.

You, however, dismiss this as a fallacy, and suggests it somehow
misrepresents you. And yet you wonder why people call your behavior (not
you) paranoid.

On top of the multiple fallacies, dubious snipping of arguments, statements that
such arguments have not been presented (just after snipping them), and general
misleading insinuations and misrepresentation, ad yet another bit of personal
attack.

Do you understand what that may say to readers about you, Steve Holden?

Apparently it's all to defend an indefensible, idiotic position. But I think
you're doing it at least partially for the fun of harassing someone.

[...]
Yes.

I elected to respond to just /one/ of the many arguments you
presented.

The other arguments, about why there are no references in Python,
shared, however, the basic property of being logical fallacies
packaged in kilometers of rambling text.
And you can say this without, by your own admission, even reading it.

No, you can not quote any place I have said that I haven't read his article. I
did read most of it. So you are yet again within the span of one posted article
presenting untrue information that you know is not true.

It
makes me wonder why we have paid you the compliment of engaging you in
debate,

Gosh, I don't know. You must be stupid to do that. Yes?

since this is the most transparent evidence to date that what
comes back will be unrelated to the arguments presented.

That is untrue, Steve Holden, and since you can't quote that "evidence", since
you evidently /have/ read my short article which you're responding to, knowing
exactly what to snip, you know that what you're saying is untrue. I think this
is your third lie in one posting. But who would care to count.


Cheers & hth.,

- Alf
 
B

Benjamin Kaplan

At this point consider whether it's possible to implement Pascal in Haskell.

If it is possible, then you have a problem wrt. drawing conclusions about
pointers in Pascal, uh oh, they apparently can't exist.

But if it is not possible to implement Pascal in Haskell, then Haskell must
be some etremely limited special-purpose language, not Turing complete  --
 is that acceptable to you?
<quote>

You're actually just proving his point here. It doesn't matter what
model Haskell uses, a version of Pascal implemented in Haskell has
pointers. Likewise, regardless of what model the implementation of
Python uses, Python itself doesn't have pointers, it has objects and
names.
 
M

Mark Lawrence

Alf said:
* Steve Holden:
Alf said:
* Michael Sparks:
[Due to the appearance of reasoned discussion (it's not practical to
read it all!) [...]
Therefore to say "in reality the implementation will be passing a
reference or pointer" is invalid. There is after all at least one
implementation that does not rely on such machine oriented language
details.
I'm sorry, but see above: in itself it's just yet another a fallacy.

And as an argument in a debate with me it's misrepresenting.
I see we are still all out of step with you.

Why did you snip the short argument?

If it's a fallacy then I'd
like to see a reasoned logical explanation of its fallaciousness.

Oh, you snipped it so that you didn't have to present it to readers.

That's dishonest, Steve Holden.

Requoting:

Now let's move to the implementation aspects.

Python as a language is implemented in many languages. One of these
is C. There are compilers to C (pypy), C++ (shedskin), for the JVM
(Jython) and .net (Ironpython).

There is also an executable operation semantics for python,
which can be found here:
http://gideon.smdng.nl/2009/01/an-executable-operational-semantics-for-python/
This set of operational semantics is written in Haskell.

Haskell is a strictly pure, lazily evaluated language. It
therefore has no pointers or references, just values and names.
The implementation therefore cannot be in terms of references
and pointers.

At this point consider whether it's possible to implement Pascal in
Haskell.

If it is possible, then you have a problem wrt. drawing conclusions
about pointers in Pascal, uh oh, they apparently can't exist.

But if it is not possible to implement Pascal in Haskell, then Haskell
must be some etremely limited special-purpose language, not Turing
complete -- is that acceptable to you?
As far as I can see, if someone says "implementing Python implies the
use of pointers" as you appear to be doing, then Michael's argument
neatly demolishes that argument by providing a counter-example: there is
an implementation of Python that does not use pointers.

That's meaningless.

But then so is maintaining that Python doesn't have references.

And so is your argument applied to Pascal, just to mention that again.

You, however, dismiss this as a fallacy, and suggests it somehow
misrepresents you. And yet you wonder why people call your behavior (not
you) paranoid.

On top of the multiple fallacies, dubious snipping of arguments,
statements that such arguments have not been presented (just after
snipping them), and general misleading insinuations and
misrepresentation, ad yet another bit of personal attack.

Do you understand what that may say to readers about you, Steve Holden?

Apparently it's all to defend an indefensible, idiotic position. But I
think you're doing it at least partially for the fun of harassing someone.

[...]
I sincerely hope that my reply does not offend or inflame you, since
that is not the intent. I do hope it educates you and puts
into context the responses you have gained from others.

After all, one simply shouting in a corner saying "YOU'RE ALL
WRONG, WRONG, WRONG. I'M RIGHT RIGHT RIGHT", when one does not to
understand what one is talking about does not tend to engender warm
fluffy feelings or sentiments of authority towards such an
individual. Be it me, you, or anyone else.

At the moment, you appear to me to be engaging in such a behaviour.
Now you don't know from Jack and probably don't care about my
viewpoint, but I would really appreciate it if you would try not to
be inflammatory in your response to this. (Since you do appear to
also have a need to have the last word)

Hoping this was useful on some level,
Yes.

I elected to respond to just /one/ of the many arguments you
presented.

The other arguments, about why there are no references in Python,
shared, however, the basic property of being logical fallacies
packaged in kilometers of rambling text.
And you can say this without, by your own admission, even reading it.

No, you can not quote any place I have said that I haven't read his
article. I did read most of it. So you are yet again within the span of
one posted article presenting untrue information that you know is not true.

It
makes me wonder why we have paid you the compliment of engaging you in
debate,

Gosh, I don't know. You must be stupid to do that. Yes?

since this is the most transparent evidence to date that what
comes back will be unrelated to the arguments presented.

That is untrue, Steve Holden, and since you can't quote that "evidence",
since you evidently /have/ read my short article which you're responding
to, knowing exactly what to snip, you know that what you're saying is
untrue. I think this is your third lie in one posting. But who would
care to count.


Cheers & hth.,

- Alf

You really are the most insulting arrogant bastard I've ever read on
c.l.py in the eight years that I've been using Python. Did you get your
training at the Dr Goebbels School of Propaganda?

Most disgustedly.

Mark Lawrence
 
S

Steve Howell

This thread is interesting on many levels. What is the core question
that is being examined here?
 
A

Alf P. Steinbach

* Benjamin Kaplan:
You're actually just proving his point here. It doesn't matter what
model Haskell uses, a version of Pascal implemented in Haskell has
pointers.

Yes, that kills his argument.

As you note, the Haskell bit is completely irrelevant.

So his use of Haskell implementation as a "no pointers" argument is completely
bogus, a fallacy.

Likewise, regardless of what model the implementation of
Python uses, Python itself doesn't have pointers, it has objects and
names.

Well that's wrong for at least one general meaning of "pointer", but why quibble
about terminology?

Names in Python refer to objects.

Those references can be copied via assignment.

That's (almost) all.

And it provides a very short and neat way to describe pass by sharing.


Cheers & hth.,

- Alf
 
A

Alf P. Steinbach

* Steve Howell:
This thread is interesting on many levels. What is the core question
that is being examined here?

I think that regarding the technical it is whether a Python name refers to an
object or not. I maintain that it does, and that the reference can be copied,
and that the semantics of the language requires this and is defined in terms of
this. Steve Holden, D'Aprano and many others maintain that there are no
references, or that if there are then they're only an implementation aspect,
i.e. that conceiveable one could have an implementation without them.

Regarding some other issues it seems to be a childish exercise in flaming, a
flame war, with claims of insanity, incompetence, lying (that's actually from
me, I reacted a bit strongly to faked quoting + conclusions from that in a
posting not appearing on Usenet but on the Python mail list), etc. etc. ad
nauseam, sprinkled with misrepresentations etc. I don't know the point of that.


Cheers,

- Alf
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top