Apple Blocks added to C++?

asd asd at none.invalid
Wed Sep 2 14:49:28 PDT 2009


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.



More information about the Digitalmars-d mailing list