On Mon, 31 May 2010 19:09:06 -0400, dsimcha <[email protected]> wrote:
== Quote from Walter Bright ([email protected])'s article
retard wrote:
> Mon, 31 May 2010 18:23:18 +0200, Pelle wrote:
>
>> On 05/31/2010 05:43 PM, retard wrote:
>>> DMD is much slower than Sun Javac/Jvm 7, GNU GCC 4.5, and LLVM.
>> For very special values of much, I suppose.
>
> Polymorphic method calls, auto-vectorization, link-time optimization,
> floating point performance, etc.
Link time optimization? Let's examine it:
https://lwn.net/Articles/387122/
"When source files are compiled and linked using -flto, GCC applies
optimizations as if all the source code were in a single file. This
allows GCC
to perform more aggressive optimizations across files, such as inlining
the body
of a function from one file that is called from a different file, and
propagating constants across files. In general, the LTO framework
enables all
the usual optimizations that work at a higher level than a single
function to
also work across files that are independently compiled."
D has had that for 8 years now, it's just done in the compiler instead
of the
linker. You can specify as many D source modules as you want on the
command line
to the compiler, and it will compile & optimizer & inline them all
together and
generate one object file.
Essentially, link time optimization is a hack to get around the
language problem
C/C++ have with their separate compilation model.
To say D code is slower because it lacks link-time optimization is a
false
supposition.
I was not aware that specifying multiple files at the same time affects
optimization. This feature needs to be better integrated into IDEs.
For small
but computationally intensive scientific computing programs, I would
rather ditch
separate compilation entirely and just compile the entire program in one
go.
Nonetheless, CodeBlocks compiles each file separately by default, and if
this is
customizable I don't how how.
Includes count for the purposes of this feature, so you shouldn't be
losing any optimization opportunities with separate compilation.