Andrei's list of barriers to D adoption

DLearner via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 6 12:55:53 PDT 2016


On Monday, 6 June 2016 at 19:30:52 UTC, Observer wrote:
> On Monday, 6 June 2016 at 18:55:22 UTC, Ola Fosheim Grøstad 
> wrote:
>> On Monday, 6 June 2016 at 18:36:37 UTC, Observer wrote:
>>> It's more complicated than that.  Part of what you need is to
>>> be able to declare a variable as (say) having two significant
>>> fractional digits, and have the rounding rules be implicitly
>>> applied when saving to that variable, producing an exact
>>> representation of the rounded result in storage.
>>
>> Yes, but if you want accurate representation of two fractional 
>> digits on storage only, then it makes most sense to do all 
>> calculations on cents (scale everything by 100) and store as 
>> integers.
>
> That's only a workaround.  It's probably best to think of 
> decimal
> arithmetic as an accountant would, not as a computer geek would.
> Intermediate arithmetic results should perhaps also be rounded/
> truncated, though it depends on the particular calculation.  For
> instance, I might have an interest percentage that gets carried
> to 4 sig figs (fractional digits), but when applied to a 
> currency
> amount with only 2 sig figs, the result should end up with 2 sig
> figs, not 6.  And then that result should continue to be used in
> later arithmetic in the same larger expression, even without an
> explicit save operation to invoke the rounding/truncation.  If
> you tried this using float for the percentage and integer for
> the amount, once the conversion to float happened it would not
> revert in the middle of the expression.
>
> Also, keeping values as only integers complicates input/output
> formatting.  I want 123456 pennies to show up as either 1234.56
> or perhaps 1,234.56 (at least, I want that punctuation in a U.S.
> locale), and this should happen without my needing to manually
> rescale during i/o operations.

Entirely agree.
Scaling everything internally to force things to integers, and 
then re-scaling on output is just bending the language because it 
cannot properly address the problem.  The result is just creating 
something more to go wrong - consider large accounting program 
maintained over several years, not always by original author.

If we allow _int foo;_ to declare an integer variable foo, then 
suggest we have
_dec bar(a,b);_ to declare a decimal variable bar with a units in 
total length, b units of decimal places.
D language then defines how (for example) assignment is carried 
out (by default), and also provides mechanisms for alternatives 
(ie some sort of dec_trunc() and dec_round() functions).




More information about the Digitalmars-d mailing list