Inherent code performance advantages of D over C?
Ola Fosheim Grøstad" <ola.fosheim.grostad+dlang at gmail.com>
Ola Fosheim Grøstad" <ola.fosheim.grostad+dlang at gmail.com>
Mon Dec 16 05:35:24 PST 2013
On Wednesday, 11 December 2013 at 00:19:50 UTC, H. S. Teoh wrote:
> hardware. So arguably, no matter what code fragment you may
> present in
> C++ or D, there's always a corresponding C code fragment that
> performs
> equally fast or faster.
Yes, but the unix/C-way is to have many simple programs that work
together to make complex systems. C is meant to be used with
makefiles and source-generating tools such as Lex, Ragel and even
the C-preprocessor. C++ and D claim to be self-sufficient. C was
never meant to be, it was meant to be part of the unix
eco-system. What you do with templates and and
compile-time-expressions in C++/D is what you do with the
ecosystem of tools in C. Therefore a comparison between C and
C++/D should include that C-ecosystem. If people don't like
sourcecode-generating tools, fine, but that is the unix/C way of
programming and it should be included when assessing the power of
C versus C++/D (and their template libraries).
> But that obscures the fact that said C code
> fragment may be written in an unmanageably convoluted style
> that no one in their right mind would actually use in practice.
Well, C-programmers do, if they have tools that generate that
convoluted style from a readable input file (like lex).
> but that proves nothing since the whole issue is writing
> *idiomatic* C
> vs. *idiomatic* D, not writing things in an unnatural way just
> so you can lay claim to the title of best performance.)
Exactly, and idiomatic C is to use source-generating tools. Just
about all medium to large size C projects use such tools that go
beyond the C-preprocessor (which conceptually is a separate tool
that is optional in theory).
Anyway, one cannot discuss performance without discussing the
target. Much of the stuff in C makes sense on memory-constrained
hardware, even C-strings are great when you want to conserve
memory and have hardware-support for 0-guarded strings
(string-instructions that will stop on 0). And, JITed regexps
won't work on mobile platforms or platforms that require signed
code.
We are now getting a new range of memory constrained hardware,
transputer-like processsors with many simple cores with fast
local memory and a saturated link to main memory. So the
memory-efficent way of getting performance is still highly
relevant.
Performance is always contextual. E.g. I think OpenCL is just an
intermediate step to getting performance, compilers will soon
have to emit co-processor friendly code automagically and
languages will have to provide constructs that makes that happen
in the most efficient way. So if C is out-dated then so are all
other languages in current use… ;-)
O.
More information about the Digitalmars-d
mailing list