Am 30.06.2011 um 21:03 schrieb Janko Mivšek:

> 
> 
> 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.
> 
Ok, I don't think we need to argue that smalltalks syntax has great potential. 
But to be honest

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

doesn't feel natural to me from a smalltalk point of view. More natural appears

database select: [:each| each....]

So not having to use javascript syntax might be an advantage. It would be great 
if you would omit the SQL as well ;)

If we talk about asynchronous programming I'm more concerned about 
composability and control of asynchronous operations then to have a nice syntax 
for a really simple case.

Norbert


Reply via email to