Inherent code performance advantages of D over C?

Paulo Pinto pjmlp at progtools.org
Fri Dec 6 15:06:54 PST 2013


Am 06.12.2013 23:40, schrieb bearophile:
> Walter Bright:
>
>> comes up now and then. I think it's incorrect, D has many inherent
>> advantages in generating code over C:
>
> 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.
>
> An example for the second is code for the kD-tree that is specialized on
> the dimension (coordinate) to slice on:
> http://rosettacode.org/wiki/K-d_tree#D
>
> As you see the cyclic selection of the coordinate nextSplit is assigned
> to an enum:
>
> struct KdTree(size_t k, F) {
>      KdNode!(k, F)* n;
>      Orthotope!(k, F) bounds;
>
>      // Constructs a KdTree from a list of points...
>      this(Point!(k, F)[] pts, in Orthotope!(k, F) bounds_) pure {
>          static KdNode!(k, F)* nk2(size_t split)(Point!(k, F)[] exset)
>          pure {
> ...
>              enum nextSplit = (split + 1) % d.length;//cycle coordinates
>
>
>
>> 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.
>
>
> On this whole subject I remember that pointers in Fortan are regarded as
> so dis-empowered that the Fortran compiler is able to optimize their
> usage better than any pointers in usual C programs, even C99 programs
> that use the "restrict" keyword.
>
>
> There are also situations where D is slower than D: when D can't prove
> that an array will be accessed in bounds [*]. And when a D compiler
> because of separate compilation can't de-virtualize a virtual class
> method call.
>
> Bye,
> bearophile
>
> [*] I will have to say more on this topic in few days.


That is why most safe systems programming language compilers allow 
disabling bounds checking. :)

Back in the MS-DOS days, I made use of {$R-} sections if I really needed 
the few ms gained by disabling bounds checking in Turbo Pascal.

--
Paulo


More information about the Digitalmars-d mailing list