Re: Added copy constructors to "Programming in D"

2022-02-10 Thread Meta via Digitalmars-d-announce
On Thursday, 10 February 2022 at 20:34:29 UTC, Walter Bright 
wrote:

On 2/10/2022 12:06 AM, Mathias LANG wrote:
I think an *immediate* improvement we could make to ease 
people's life is to make `auto` peel the outermost qualifier 
level inside functions.


So that:
```D
const int* ptr;
auto p2 = ptr;
static assert(is(typeof(p2) == const(int)*));
```

I really can't think of any downside to it, only upsides:
- It is still predictable / consistent;
- It *might* reduce the number of template instantiations in 
some cases;
- It just flows more naturally... If you want full constness, 
there's still `const`;


It sounds sensible to me.


Didn't Scott Meyers cover exactly this in his "the last thing D 
needs" talk? It seems like a really bad idea.


Re: Added copy constructors to "Programming in D"

2022-02-10 Thread Elronnd via Digitalmars-d-announce

On Thursday, 10 February 2022 at 08:06:23 UTC, Mathias LANG wrote:

make `auto` peel the outermost qualifier level inside functions.


Shouldn't do that for class references.  Otherwise seems fine.


Re: Added copy constructors to "Programming in D"

2022-02-10 Thread Walter Bright via Digitalmars-d-announce

On 2/10/2022 12:34 PM, Walter Bright wrote:

On 2/10/2022 12:06 AM, Mathias LANG wrote:
I think an *immediate* improvement we could make to ease people's life is to 
make `auto` peel the outermost qualifier level inside functions.


So that:
```D
const int* ptr;
auto p2 = ptr;
static assert(is(typeof(p2) == const(int)*));
```

I really can't think of any downside to it, only upsides:
- It is still predictable / consistent;
- It *might* reduce the number of template instantiations in some cases;
- It just flows more naturally... If you want full constness, there's still 
`const`;


It sounds sensible to me.



By the way, `cast()ptr` will peal off the outermost const/immutable/etc from the 
type.


Re: Added copy constructors to "Programming in D"

2022-02-10 Thread Walter Bright via Digitalmars-d-announce

On 2/10/2022 12:06 AM, Mathias LANG wrote:
I think an *immediate* improvement we could make to ease people's life is to 
make `auto` peel the outermost qualifier level inside functions.


So that:
```D
const int* ptr;
auto p2 = ptr;
static assert(is(typeof(p2) == const(int)*));
```

I really can't think of any downside to it, only upsides:
- It is still predictable / consistent;
- It *might* reduce the number of template instantiations in some cases;
- It just flows more naturally... If you want full constness, there's still 
`const`;


It sounds sensible to me.


Re: Added copy constructors to "Programming in D"

2022-02-10 Thread Mathias LANG via Digitalmars-d-announce

On Thursday, 10 February 2022 at 02:39:11 UTC, Ali Çehreli wrote:


Yeah, that issue bugs me a little.

Ali


I think an *immediate* improvement we could make to ease people's 
life is to make `auto` peel the outermost qualifier level inside 
functions.


So that:
```D
const int* ptr;
auto p2 = ptr;
static assert(is(typeof(p2) == const(int)*));
```

I really can't think of any downside to it, only upsides:
- It is still predictable / consistent;
- It *might* reduce the number of template instantiations in some 
cases;
- It just flows more naturally... If you want full constness, 
there's still `const`;


Likewise, I've been tinkering with having `const* p2 = ptr` to 
allow `p2` to be mutated. But it has far more implications and 
the benefits aren't as clear. For `auto`, I think the case is 
pretty straightforward.


Fun fact: C++ mangling actually does that.
```D
extern(C++) void foo (const int a);
extern(C++) void bar (int a);

pragma(msg, foo.mangleof); // _Z3fooi not _Z3fooKi
pragma(msg, bar.mangleof); // _Z3bari
```

P.S: Thanks for spreading the love about `-preview=in`. I haven't 
moved forward with enabling it by default yet, because it just 
does exactly what we want it to do and has never bothered us, so 
we tend to forget it's not the default. I shall however start to 
move ahead now that the switch has been available for a few 
releases.