[Python-Dev] Parrot -- should life imitate satire?

Aahz Maruch aahz@rahul.net
Tue, 31 Jul 2001 17:59:12 -0700 (PDT)


Dan Sugalski wrote:
> At 05:04 PM 7/31/2001 -0700, Aahz Maruch wrote:
>>Dan Sugalski wrote:
>>>
>>> As for threading, well, that's where things get interesting. Perl's
>>> tried it two ways (multiple threads in the same interpreter, and one
>>> thread per interpreter, with cloned interpreters) both of which aren't
>>> very good. And the global lock thing's not that keen either. The plan
>>> for parrot is to allow multiple interpreters to run simultaneously,
>>> with shared data protected on access time. (And *only* shared data
>>> protected, so there's no penalty to access non-shared data) Along with
>>> a scheme to allow only partial (or no) visibility of the spawning
>>> thread's variables. We plan on basing the secure sandbox scheme around
>>> this as well.
>>
>>This is where calling what Python uses "variables" gets you into real
>>problems.  Many people think that the terms for "variable" and
>>"reference" should be "name" and "binding"; it makes things far less
>>confusing.
> 
> I'm not sure that's the appropriate translation for what perl considers 
> variables and references, but that's OK.

Paul evidently disagrees with me, but I'll write a rebuttal to that
right after I finish this.  ;-)

>>See, Python objects are *global*.  Period.  No ifs, ands, or
>>buts.
> 
> Is this global in the "all variables are in one big pool and can be
> looked up by name", more or less the equivalent of externing all your
> C variables, or global in the "Any thread might be able to see it"
> sense? (I thought Python had lexically scoped variables, but I might
> be wrong here. I'm an internals guy--the actual language being run is
> just an implementation detail... :)

Somewhere in between.  Python names are scoped; Python objects are not.
Here's a trival example: given a global list "l" (and "global" in this
phrase almost always means "module global"), and the following code
fragment running in one thread

    def foo():
        x = 1
        l.append(x)

any other threads created in that module will immediately have access to
the locally-created object "1".

Beyond that, though, given Python's introspection capabilities, it is
theoretically correct to say that all variables can be looked up by
name.

> If it's "All objects are visible to all threads" thing, that's fine,
> you can still handle threading with some care. Perl's done it wrong
> once, and I know how to do it much less wrong with Parrot. (It's not,
> strictly speaking, possible to do it right without the programmer
> taking an active hand)

Yup.  Which is why the GIL represents a pretty good compromise, most of
the time, particularly the way it's implemented in Python.

>>And, as Paul pointed out, the global interpreter lock only kills you if
>>you're running SMP in the first place.
> 
> Yep, well, I do. :)

Should have added, "...and only if you're running pure Python code."
-- 
                      --- Aahz (@pobox.com)

Hugs and backrubs -- I break Rule 6       <*>       http://www.rahul.net/aahz/
Androgynous poly kinky vanilla queer het Pythonista

I don't really mind a person having the last whine, but I do mind someone 
else having the last self-righteous whine.