Providing implicit conversion of - memory-safety
bachmeier
no at spam.net
Wed Jan 24 00:34:19 UTC 2024
On Tuesday, 23 January 2024 at 21:40:46 UTC, Renato wrote:
> While I can understand your frustration, it seems to me D is
> not to blame in this instance because the code is quite
> patently using unsafe constructs (D does not claim to be fully
> safe).
It pretends to be safe. Consider this:
```
void main() {
long y = int.max + 1;
writeln(y); // -2147483648
long y2 = int.max;
writeln(y2 + 1); // 2147483648
int y3 = y; // Won't compile
}
```
It can only be described as a mess of inconsistency. `int y3 =
y;` should be an error and it is. `int.max + 1` silently turning
into a negative value is frankly insane because it's the same
problem that a few lines below won't compile.
> Would something like this work?
>
> ```d
> double value(T)(T index, double* x) if (is(T : size_t))
> ```
There's no way to add a template constraint. Many different
types, most of which I defined myself, could be sent as an
argument.
> that it's almost always a mistake to subract from any unsigned
> type - D scanner correctly warns about that).
It's the inconsistency that's the problem. You have to program as
if the compiler doesn't catch anything - sometimes it throws
errors, sometimes it lets stuff through because maybe that's what
you want. `int y3 = y` in the code above is not necessarily an
error.
More information about the Digitalmars-d-learn
mailing list