[Stackless] Re: Stackless 3.0 for Python 2.3: new binaries

Bob Ippolito bob at redivi.com
Mon Feb 23 20:14:16 EST 2004


On Feb 23, 2004, at 7:34 PM, Christian Tismer wrote:

> Gregor Lingl wrote:
>
>> Christian Tismer schrieb:
>>> New Win32 binaries have been uploaded to the Stackless website.
>>>
>>> Some compatibility issues with certain constructors
>>> have been solved.
>>>
>>> Please let me know of any problems.
>>>
>> Trying seriously to find out how to use stackless and what it is
>> good for ;-),
>
> Alaaf, you are cheating, right?
> You must have known, partially, last August. ;-)
>
>> I stumbled just in the beginning. While I was able to execute some of 
>> my Python programs, among them Tkinter-programs
>> and even recursive ones,
>> (1) I was not able to use Stackless from IDLE:
> ...
>
>>  >>> 3*4
>> Traceback (most recent call last):
>>   File "C:\Python23\lib\idlelib\rpc.py", line 233, in asyncqueue
>>     self.putmessage((seq, request))
>>   File "C:\Python23\lib\idlelib\rpc.py", line 322, in putmessage
>>     s = pickle.dumps(message)
>> RuntimeError: maximum recursion depth exceeded
>
> Yes, I tried this and I get the same problem.
> Have to admit that I'm not a regular IDLE user.
> Seriously, I have no idea what's going on.
> Seriously, I have also no idea why Python must
> try to pickle something, to compute 3*4 ???
>
> Everything works with Python 2.2. I expect something
> has changed dramatically with Idle, and there is some
> compatability issue with all the new pickling support that
> we had to add for Python 2.3. Eeek, how do I debug that!

This is not an authoritative response, because I don't actually know, 
however here is my guess:

(1) Python is an absolutely horrible terrible language for embedding 
(arbitrarily) inside of itself on a large scale for more reasons than I 
care to list (threads, lack of stacklessness, globals up the wazoo, 
inability to create a real subinterpreter from Python code, the fact 
that the subinterpreters from C code probably still share globals, 
etc.)
(2) GUI run loops have a long history of being especially difficult to 
integrate with one another
(3) On some platforms (like say, OS X for example) running an app 
inside of an app is not what you want to do because they will share the 
same menu bar and such.  The only time I've seen this used well is in 
Interface Builder, but you don't need to use a debugger from Interface 
Builder so the preview mode makes sense to do in-process.

Therefore the only good solution for running and debugging a Python 
program from an written-in-python IDE is to spawn a new interpreter 
process and communicate with it via some RPC mechanism and communicate 
over pipes or sockets.  In order to use debugging and smarter-than-repr 
representations of data (i.e. the IDE should let you browse objects, 
classes, etc.) it's going to have to send objects over the wire.. which 
means, pickle.

It probably took the IDLE team until Python 2.3 to figure this out, 
implement this complicated mechanism, and get it tested well enough to 
be merged with the main branch.

But I must reiterate that I have no idea.. never looked at the IDLE 
source code, don't use IDLE, haven't been on python-dev long enough to 
notice if/when this happened... I have however run into these sorts of 
problems on my own plenty of times and solved them to various degrees 
(but have not written a full out RPC mechanism, though I would like to 
at some point if a good one doesn't yet exist).

-bob
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2357 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-list/attachments/20040223/a2bdb86f/attachment.bin>


More information about the Python-list mailing list