Go vs D on reddit
Walter Bright
newshound2 at digitalmars.com
Fri Oct 8 19:56:33 PDT 2010
bearophile wrote:
> Following a short trail of links I've found this page, about how C# tests its
> variable initialization, it's quite cute:
> http://en.wikipedia.org/wiki/Definite_assignment_analysis D is less smart and
> more rough here, but to invent and implement this you may need more than one
> developer... I don't think you can ask Walter to implement that, even if the
> algorithm is known. I don't know how Mono devs have managed to implement it.
From the article:
"The second way to solve the problem is to automatically initialize all
locations to some fixed, predictable value at the point at which they are
defined, but this introduces new assignments that may impede performance. In
this case, definite assignment analysis enables a compiler optimization where
redundant assignments — assignments followed only by other assignments with no
possible intervening reads — can be eliminated. In this case, no programs are
rejected, but programs for which the analysis fails to recognize definite
assignment may contain redundant initialization. The Common Language
Infrastructure relies on this approach."
This is EXACTLY what D does, and did from day 1. The analysis to do it was
implemented (by me) back in 1985 or so. It's OOOOOLLLLLDD technology, not some
fabulous thing C# invented.
The term for it is "Dead Assignment Elimination." You can find it in compiler
textbooks, even old ones. I learned about it in 1982 from Hennessey and Ullman.
I strongly suggest you take a tour through the comments in the source code of
the dmd optimizer. The global optimizer code is in files starting with 'g'.
Optimizations not done by dmd:
1. loop unrolling, loop fusion
2. auto-vectorizing
3. use of sse fp registers
You can rag on dmd for not doing them, but please, most standard data flow
analysis done by compilers is old hat, is done in dmd, has been for decades, and
is not some new fangled thing recently invented by other compiler marketing
departments.
More information about the Digitalmars-d
mailing list