On 02/19/2014 07:13 AM, Vladimir wrote:

> I`m learning templates in D language and I want to thank the creators of
> the language for this.
>
> There is an educational task: process table entries, if you know which
> column to use.

[...]

> In c++ I can create in compile-time special vesrion ProccessRow function
> for various combinations of the array "isUseField" values. This reduces
> the total number of run-time operations in most cases.

Can you show the C++ code perhaps on a simpler task? I would expect D's compile-time features to be superior to C++'s in all cases. (And I would like to be educated if it is not so. :) )

> I implemented such idea, but result confused me. I used several
> compilers: dmd(version: DMD32 D Compiler v2.063.2, options: -inline
> -release -O -noboundscheck), ldmd (version: the LLVM D compiler
> (67a1a3)  based on DMD v2.063.2 and LLVM 3.2svn; options: -inline
> -release -O -noboundscheck) and gdc (version: 4.8.1, options: -O3
> -march=native -frelease -fno-bounds-check).
>
>      Result dmd : simple processing - 39 ms; template processing - 20 ms.
>      Result ldmd: simple processing -  8 ms; template processing - 12 ms.
>      Result gdc : simple processing -  8 ms; template processing - 14 ms.
>
> Where I'm wrong? How  I  can rewrite the program to make effect more
> evident?

I would like to understand the request first. Neither ProccessRow() nor OptimizedProcessTable() take isUseField as template parameters. Besides, isUseField is generated at runtime. No, I don't understand. :)

> Or may be, this optimization is meaningless in D...?

I doubt it.

> Full version my very simplified example such task:
> https://gist.github.com/Vladimir-Z/1a1755ce91cb0e7636b5
>
> Thanks for your advice.

Ali

Reply via email to