[Python-Dev] Musings on concurrency and scoping ("replacing" Javascript)

Bob Ippolito bob at redivi.com
Sat Jul 8 00:22:53 CEST 2006


On Jul 7, 2006, at 1:08 PM, Guido van Rossum wrote:

> On 7/7/06, Ka-Ping Yee <python-dev at zesty.ca> wrote:
>> I've been doing a bunch of Firefox extension programming in  
>> Javascript
>> and suddenly a few of the recent topics here came together in my head
>> in a silent kapow of thoughts.  This is kind of a side note to the
>> security discussion, but they're all interconnected: network
>> programming, concurrency, lexical scoping, security.
>
> Hm... I wonder if this style has become so popular in JS because it's
> all they have? I find callback-style programming pretty inscrutable
> pretty soon.

You really don't have any choice without continuations or some built- 
in concurrency primitive. Callbacks are slightly less painful in  
JavaScript because you can define them in-line instead of naming it  
first.

>> Client-side web scripting tends to have a callback/continuation-ish
>> concurrency style because it has to deal with network transactions
>> (which can stall for long periods of time) in a user interface that
>> is expected to stay always responsive.  The Firefox API is full of
>> listeners/observers, events, and continuation-like things.  So one
>> thing to consider is that, when Python is used for these purposes,
>> it may be written in a specialized style.
>>
>> As i write JavaScript in this style i find i use nested functions
>> a lot.  When i want to set up a callback that uses variables in the
>> current context, the natural thing to do is to define a new function
>> in the local namespace.  And if that function has to also provide a
>> callback, then it has another function nested within it and so on.
>>
>>     function spam() {
>>         var local_A = do_work();
>>         do_network_transaction(
>>             new function(result_1) {
>>                 var local_B = do_work(result_1);
>>                 do_network_transaction(
>>                     new function(result_2) {
>>                         do_work(local_A, local_B, result_1,  
>> result_2);
>>                         ...
>>                     }
>>                 );
>>             }
>>         );
>>     }
>
> How can you ever keep track of when a '}' must be followed by a ';' ?

"}\n" is the same as "};" as far as the JavaScript spec goes, you can  
do either or both.

-bob





More information about the Python-Dev mailing list