Jeremie Pelletier Wrote:

> There's a huge difference between complex code and long code, especially in 
> compiled languages. Those 8 lines in your code are not convenient in that you 
> don't get what they do on first sight. Declaring your things separately and 
> then registering the closures to the queues would result in the exact same 
> machine code being generated, but also be much easier to read.

I disagree. That depends on type of code and is also a matter of taste. 

For example in JavaScript, where there's no difference between functions and 
lambdas, I prefer to use deeply nested anonymous functions rather than function 
declarations beforehand. I often find that more readable and I prefer 
definition and use of the function in one place.

> The only place where I expect to see code unreadable like this is in 
> scripting where the parser has an impact on the performance.
> 
> I also don't get why you need two closures on two different queues. My take 
> at this in D would look like:
> 
> DispatchAsync({
>    writefln("Look, async!");
> });
> 
> No global queue to dispatch on the main queue, that's just redundant and 
> slow, custom dispatcher that is portable, and D closures, simple and elegant 
> :)

In that example global serial queue is used as synchronisation mechanism. It is 
needed to interact with Cocoa UI properly.

Of course D has nicer syntax than C blocks. But in context of C, given its 
already-awkward syntax for function types, limitations and compatibility 
needed, blocks are quite good.

Reply via email to