Why I chose D over Ada and Eiffel

PauloPinto pjmlp at progtools.org
Thu Aug 22 01:14:53 PDT 2013


On Thursday, 22 August 2013 at 07:59:56 UTC, qznc wrote:
> On Wednesday, 21 August 2013 at 16:21:47 UTC, Ramon wrote:
>> As for generics, let me put it this way:
>> In Eiffel generics have been an integral part of the language 
>> design from the beginning. In D ways and mechanisms are 
>> provided to achieve what quite usually is the goal of 
>> generics, namely generic algorithms in way, i.e. by having to 
>> write code for an algorithm just once. That might seem to be a 
>> minor difference, in particular when looking from a "Huh? I 
>> can get it done, so what's the fuss all about, eh?" 
>> perspective.
>> Of course, there the C and successors worlds proponents are 
>> right, this incurs a price (which templates do, too ...) and, 
>> yes, in the end, somewhere someone or something must sort the 
>> types out anyway (because of the way CPUs work).
>
> There are basically two ways to implement generics. Type 
> erasure (Java,Haskell) or template instantiation (C++,D). 
> Instantiation provides better performance, but sacrifices error 
> messages (fixable?), binary code size, and compilation 
> modularity (template implementation must be available for 
> instantiation). Type safety is not a problem in either approach.
>
> Longer form: http://beza1e1.tuxen.de/articles/generics.html
>
> An interesting twist would be to use type erasure for reference 
> types and instantiation for value types. Another idea could be 
> to use instantiation selectively as an optimization and erasure 
> in general.

Which is the way .NET does it.

http://blogs.msdn.com/b/carlos/archive/2009/11/09/net-generics-and-code-bloat-or-its-lack-thereof.aspx


>
>> Another example is data types, concretely integers. Ada offers 
>> a nice way do precisely nail down precision/storage. If I want 
>> to store days_of_month I can have an integer type holding ints 
>> between 1 and 31 (which, due to the way they implemented it 
>> can be a PITA). Eiffel gives me something quite similar (in a 
>> more elegant way) and additionally a "dumb" INTEGER (32 or 64 
>> bit) and than a gazillion subtypes like "INTEGER_16". That's 
>> great because in a quick and dirty script a plain integer (max 
>> size of CPU) is good enough and keeps life simple. If I need 
>> days_of_month I can very easily have that as int type.
>
> In D you can use structs:
>
>   struct days_of_month {
>     int day;
>     /* fill in operator overloading etc */
>   }

Thanks for the Eiffel info.


More information about the Digitalmars-d mailing list