default random object?

grauzone none at example.net
Sat Feb 14 18:36:40 PST 2009


dsimcha wrote:
> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
>>> Also, dsimcha said:
>>>  > This is purely a convenience feature for when you want
>>>  > random number generation to "just work" even if it's not the most
>>>  > efficient thing
>>>  > in the world.
>>>
>>> I agree to him. If you need efficiency, you can write your own code or
>>> use a highly specialized library fit for the job. Most users probably
>>> wouldn't rely on the standard library if they're optimizing their code.
>> Well, you see, here's where we can "agree to disagree" (as much as I
>> dislike the PCness of the phrase). IMHO, if most users in search for
>> efficiency need to roll their own counterparts of the abstractions
>> provided by Phobos, I've majorly wasted my time. Costly abstractions are
>> a dime a dozen. I have nothing but contempt for them. Every dog language
>> has them in spades. The real challenge is not to write sort in three
>> lines. It's to write it in three lines and have it beat the 2000 lines
>> sort. (Alas, we're not there yet.)
>>  > As long as the user _can_ write his own code, the standard library
>>  > should prefer to be simple and easy to use. It also prevents bitrot,
>>  > bloat, and incomprehensible library code.
>> This approach seems to be pushing bitrot, bloat, and incomprehensibility
>> into the user code, while keeping the library a collection of useless
>> toys. Hardly an approach I'd go for. I am sorry. I just disagree.
>> Andrei
> 
> Just to set the record straight, I actually agree with Andrei here.  Elegant but
> costly abstractions are simply not D's niche, and are relatively easy to come by.
>  If you want them, use a good dynamic interpreted language instead.  The quote

Well, I'm not necessarily talking about "elegant but costly 
abstractions". Rather, D is full of design decisions, where convenience 
and simplicity was preferred to maximal achievable performance:

- relies on GC, rather bad support for fully manual MM
   (also consider the new closures in D2.0)
- expensive checks in non-release mode (array bounds checking,
   object invariants)
- methods are virtual by default
- foreach used to call the enclosed code as a delegate
- lazy keyword
- associative arrays, also .sort
- many runtime core and std-lib functions are designed that way

Maybe there's even more. D always has been a nice blend of performance 
centered low level languages like C/C++, and higher level ones liek 
dynamic or functional languages.

> above was taken out of context.  I believe that a library should provide efficient
> and flexible abstractions that eliminate the need for people to roll their own and
> that the goal of Phobos2 in this regard is a good one.  I probably wouldn't use
> much of what was in std.algorithm, at least in the performance critical parts of
> my code, if it were pass-by-delegate instead of pass-by-alias.  My only point was
> that, when complexity in the API (or language) is unavoidable if efficiency and
> flexibility are to be achieved, I think it's ok to slap a few not-so-efficient
> convenience features on top of it as long as the core remains efficient, flexible
> and reasonably usable.



More information about the Digitalmars-d mailing list