Programming Language for Games, part 3

bearophile via Digitalmars-d digitalmars-d at puremagic.com
Sat Nov 1 18:41:15 PDT 2014


Walter Bright:

Thank you for your answers.

>> D removes very little bound checks. No data flow is used for 
>> this.
>
> This is false.

Oh, good, what are the bound checks removed by the D front-end? I 
remember only one case (and I wrote the enhancement request for 
it). Recently I argued that we should add a little more removal 
of redundant bound checks. But probably the "GC and C++" mantra 
is more urgent thank everything else.


> This is on purpose, because otherwise about half of what enums 
> are used for would no longer be possible - such as bit flags.

On the other hand we could argue that bit flags are a 
sufficiently different purpose to justify an annotation (as in 
C#) or a Phobos struct (like for the bitfields) that uses mixin 
that implements them (there is a pull request for Phobos, but I 
don't know how much good it is).


>> D module system has holes like Swiss cheese. And its design is 
>> rather simplistic.
>
> Oh come on.

ML modules are vastly more refined than D modules (and more 
refined than modules in most other languages). I am not asking to 
put ML-style modules in D (because ML modules are too much 
complex for C++/Python programmers and probably even unnecessary 
given the the kind of template-based generics that D has), but 
arguing that D modules are refined is unsustainable. (And I still 
hope Kenji fixes some of their larger holes).


>>> - no implicit type conversions
>> D has a large part of the bad implicit type conversions of C.
>
> D has removed implicit conversions that result in data loss. 
> Removing the rest would force programs to use casting instead, 
> which is far worse.

This is a complex situation, there are several things that are 
suboptimal in D management of implicit casts (one example is the 
signed/unsigned comparison situation). But I agree with you that 
this situation seems to ask for a middle ground solution. Yet 
there are functional languages without implicit casts (is Rust 
allowing implicit casts?), they use two kinds of casts, the safe 
and unsafe casts. I think the size casting that loses bits is 
still regarded as safe.


>>> - had a sane macro system
>> There's no macro system in D. Mixins are an improvement over 
>> the preprocessor,
>> but they lead to messy code.
>
> D doesn't have AST macros for very deliberate reasons, 
> discussed at length here. It is not an oversight.

I am not asking for AST macros in D. I was just answering to a 
laundry list of things that C doesn't have (I was answering that 
D doesn't either).


>>> But I guess D already covers it...
>> D solves only part of the problems. And you have not listed 
>> several important
>> things. There's still a lot of way to go to have good enough 
>> system languages.
>
> D does more than any other system language.

Perhaps this is true (despite Rust is more more refined/safer 
regarding memory tracking), that's why I am using D instead of 
other languages, despite all the problems. But fifteen years from 
now I hope to use something much better than D for system 
programming :-)

Bye,
bearophile


More information about the Digitalmars-d mailing list