S, Norbert Hartl piše:
> 
> Am 30.06.2011 um 17:53 schrieb Janko Mivšek:
> 
>> S, Norbert Hartl piše:
>>
>>> Am 30.06.2011 um 17:23 schrieb Stéphane Ducasse:
>>
>>>>>> apparently people get excited by nodeJS and I would like to know the 
>>>>>> equivalence of
>>
>>>>> What does it mean?
>>
>>>> in Pharo.. how do you have the same: 
>>
>>> It depends what is in your head when you wrote this. The code snippet 
>>> doesn't tell that much. Registering a Block for execution on request is 
>>> probably not what makes you excited about. What is exciting about it is 
>>> that javascript is written in a strictly asynchronous manner (event driven) 
>>> and that matches perfectly the implementation with asynchronous I/O. 
>>> Suddenly you can write programs they way you ever wanted it. And lucky for 
>>> us smalltalk itself is event driven so it can go there easily, too. Well, 
>>> easily would mean to have support for asynchronous I/O in the vm (file 
>>> operations) and in the socket plugin at least.
>>
>> Because I'm just working on asynchronous no-blocking node.js like
>> control flow in Aida, I can say that this is really natural to Smalltalk
>> with its closures, much more than so called callbacks in JavaScript. In
>> Smalltalk it is more readable and you hardly notice the difference to
>> the normal Smalltalk code, while in JavaScript those callbacks are a bit
>> hard to grasp and understand. From non seasoned programmer perspective,
>> that is.
>>
> Can you elaborate on this? I agree that one of the biggest flaws in 
> javascript is that you have to write function() {} to use a closure which 
> prevents its usage in a lot of cases, e.g. in filter functions etc. It is 
> just ugly and nobody likes it. The second point is that you need to preserve 
> this in javascript manually if you wish to use it in closures.
> Apart from that I can see a single difference between the two. Callbacks are 
> natural to javascript because most usage pattern use it. Closures are natural 
> to smalltalk because it just needs [ ] and it is well used throughout the 
> class library.

Let me show an example by Ryan Dahl, author of node.js. First in
JavaScript then how it will look in Smalltalk.

Synchronous blocking database call:

        var result = db.query("select..");
        // wait
        // use result

Asynchronous non-blocking database call:

        db.query("select..", function (result) {// use result });
        // continue

In first case program execution is blocked until database returns
result. In second case we register a callback function to deal with the
result. This function will be called later when result arrives, while we
don't wait but continue with execution.

If you'll do in Smalltalk a blocking call:

        result := db query: 'select..'.
        result useIt
        
A non-blocking call can look something like:

        db query: 'select..' thenDo: [:result | result useIt ]

As you see with our closures we can much more naturally and
understandably write such calls.

Best regards
Janko



-- 
Janko Mivšek
Svetovalec za informatiko
Eranova d.o.o.
Ljubljana, Slovenija
www.eranova.si
tel:  01 514 22 55
faks: 01 514 22 56
gsm: 031 674 565

Reply via email to