Eljay Love Jensen
I like D Programming Language. Thank you!
I have used C++ since 1990. I have grown to love C++ and concurrently hate C++. There is a simpler, kinder, gentler, saner language in there, struggling to get out. I think D has culled out that simpler, kinder, gentler, saner language. (So has Java, but Java has gone down a different path. Not a bad path, just a different one.)
I saw that there were some people upset that 'volatile' is not in the language. But those who were bemoaning the absence of 'volatile' do not appear to understand what volatile is, and is not. It is not a promise of a memory barrier, which is what they appear to percieve it as. Of course, on an embedded system that does not have any CPU cache, then volatile does prevent certain optimizations (putting values in registers, not performing an otherwise seemingly superfluous memory read). Forgive me if I'm wrong -- but this kind of software effort does not appear to me to be the target problem domain of D Programming Language. So lack of volatile isn't a big deal. NOTE: I've done driver development where volatile and correct use of memory barriers was critical.
Second, I saw that there were some people upset that 'const' is not in the language. As a const-correct pedant, I too am upset... but only very, very slightly. Taking a page out of Objective-C's handbook, a developer can make their programs const-correct using the same convention that Objective-C programmers use. The trick is to make an ImmutableFoo interface that only has accessors and other non-mutating routines, and the regular Foo implementation that has both the accessors and benign (non-mutating) routines as well as the mutators and other routines that alter the logical state of the object. Voila!
Third, I saw some people lament not having control over memory resources. But I realized after about 10 seconds that you do provide access to malloc and free heap management routines. So your treatment of garbage collection as the first class citizen, plus giving access to heap routines is... well... brilliant.
Fourth, you've done a wonderful job obviating the preprocessor! I hate the preprocessor! I hate it, I hate it, I hate it. Nothing but trouble from the day it was born.
And to those involved in GDC and bringing D Programming Language to OS X 10.4 and XCode 2.1... thank you, too!
Okay, new topic.
Hmmm... in D, how do I specify a function pointer that returns a function pointer of the same signature. Can't do it in C, can do it in C++ (with functors, so it's cheating somewhat). Can D do it? Useful for state machines where the returned function pointer represents the new state.
PS: the people complaining about volatile is what lead me (via Google) to stumble upon D Programming Language by accident. So I am indebted to those who lamented the absence of volatile in D Programming Language.