Congratulations to the D Team!

Timon Gehr timon.gehr at gmx.ch
Tue Jul 10 15:49:08 PDT 2012


On 07/11/2012 12:05 AM, Walter Bright wrote:
> On 7/9/2012 3:27 PM, Jakob Ovrum wrote:
>> This opEquals is only logically constant, not bitwise constant, hence
>> it must
>> not be const; similar to the caching scenario. Just trying to
>> demonstrate that
>> the issue is bigger than just caching - it's any logically constant
>> comparison
>> function.
>
> I understand, but the downside of not making these functions const is it
> will torpedo the use of functional style programming in D.
>

Making these functions const will torpedo the use of OO style 
programming in D. OO is all about data encapsulation, aliasing and
mutation.

Also consider that:

- Functional style programs use structs and delegates, not class
   objects. Classes are an OO abstraction.

- The most well-known functional programming language, Haskell, mutates
   existing state a great deal at runtime, since almost _everything_ is
   lazily initialized.  I have written some Haskell-style D code, and
   could not use the 'const', 'immutable' or 'pure' qualifiers.

- what actually harms functional style programming in D the most is the
   lack of tail calls. (I have some other gripes, but this is the most
   important one.)

- D is multi-paradigm. A program can be functional style in many ways,
   and still mutate state. (Functional programming languages have to
   invent idioms and syntactic sugar to provide an abstraction for
   mutation. The compiler has to detect those and optimize them into
   mutation.)

> A straightforward workaround is to use PIMPL to encapsulate the logical
> const stuff, and then cast the reference to const to use inside the
> opEquals.

I didn't get that.


More information about the Digitalmars-d mailing list