2011/6/30 Janko Mivšek <[email protected]>: > > > 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. >
Indeed. Actually the recent JS popular libraries coding style reminds me more and more smalltalk. Looks like they are inventing new wheel, going long road from creepy C syntax and C programming style to smalltalk. > Best regards > Janko > -- Best regards, Igor Stasenko AKA sig.
