DIP 1018--The Copy Constructor--Formal Review

Atila Neves atila.neves at gmail.com
Mon Feb 25 15:45:51 UTC 2019


On Monday, 25 February 2019 at 00:38:02 UTC, Walter Bright wrote:
> The problem with C++ const is it only goes one level, i.e. what 
> I call "head-const". If you pass a T to a const parameter, 
> anything T references remains mutable. It's more of a 
> suggestion than anything reliable or enforceable. It only works 
> if your data structures are simple aggregates, not graphs.
>
> D's const has teeth. Nothing can be modified through T. If 
> you're used to writing code that tweaks const data under the 
> hood, D's const will never work for you. Yes, it means 
> rethinking how the data and code is organized, and that can be 
> painful. But it is how FP works. FP offers a number of 
> advantages, and D's const offers a path into that.

I have no idea what people are talking about when they mention on 
this forum that D's const is useless. Nearly every function 
parameter in my code is `in`. Nearly every variable declaration 
uses `const` instead of `auto`, the main exception being when a 
function is constructing a value to return. Most member functions 
I write are const or inout. I use const in D as I do in C++: 
pretty much everywhere. Nearly every single time a function 
parameter in my code isn't const is when it's an input range.

I happened to be working on dpp at the time I wrote this:

$ ag 'auto ' source | wc -l
67
$ ag 'const ' source | wc -l
204

The *only* problem I have with const in D is that const values 
can't be copied, which is silly. I'd expect DIP1018 to fix that.




More information about the Digitalmars-d-announce mailing list