On Friday, 6 December 2013 at 22:52:46 UTC, Walter Bright wrote:
On 12/6/2013 2:40 PM, bearophile wrote:
I think in your list you have missed the point 8, that is templates allow for data specialization, or for specialization based on compile-time values.

The common example of the first is the C sort() function compared to the type
specialized one.

That's a good example.


2. D knows when functions are pure. C has to make worst case assumptions.

Perhaps D purity were designed for usefulness, code correctness, etc. but not to help compilers. I remember some recent discussions in this newsgroup by developers of GDC that explained why the guarantees D offers over C can't lead to true improvements in the generated code. If this is true then perhaps D has some features that weren't designed in hindsight of what back-ends really need
to optimize better.

dmd can and does remove multiple calls to strongly pure functions with the same arguments.

and what about holes in immutable, pure and rest type system?


There are also situations where D is slower than D: when D can't prove that an
array will be accessed in bounds [*].

In the cases where D cannot, can C? Nope. C doesn't even know what an array is. Can any other language? Nope.


And when a D compiler because of separate compilation can't de-virtualize a virtual class method call.

Can C devirtualize function calls? Nope.

C doesn't have virtual functions. By the way, does D devirtualize them? AFAIK it doesn't either, but I do remember spec page was talking about it (this is so Dish - advertize optimization trick in spec and do not implement it).

Reply via email to