On Saturday, 20 December 2014 at 19:57:54 UTC, ketmar via Digitalmars-d wrote:
On Sat, 20 Dec 2014 19:26:54 +0000
Jonathan Marler via Digitalmars-d <[email protected]> wrote:

Hmmmm...an interesting concept. Make unsafe things harder to do to discourage their use. I'm not sure if I agree but maybe you can convince me. Where do you draw the line?
the thing is that they aren't only harder to use, but they are also explicitly marked as "system" things. i.e. things that should be used
only if you are *really* know what you're doing.

besides, code with `system.cast()` looks suspiciously "burden", which
also signals that this is not a thing one should mindlessly use
everywhere.

something like that.

is it requires less maintenance. Say you have the following:

void myfunc(uint x)
{
     ubyte val;
     //
     // ...
     //
     val = cast(ubyte)x;
}

Now let's say that you need change the value of 'val' to ushort.

void myfunc(uint x)
{
     ushort val;
     //
     // ...
     //
     val = cast(ubyte)x;
}
why do you need `cast` here? isn't `to!ubyte` looks better? and it's not only looks better, it will provide you additional overflow checks too. so if you'll throw a '1024' in your unittest, the second version
will fail, signalling that something is going wrong.


Ah yes you are right, to!byte would make more sense because you check at runtime whether or not x is within the range of a byte. This would make the code crash right away instead of having to track down the bug but you still wouldn't see the bug until runtime, and may only happen in rare cases that only occur in the customer environment. to!(typeof(val)) would also handle changing the type when the type of val changes. It looks awkward though. It would be nice if "to" handled type inference.

val = to(x);
// instead of val = to!(typeof(val)(x);
// or
val = to!auto(x); // Impossible right now since compiler doesn't understand "to"

"val = to!auto(x)" could be useful in some cases but this would be the same basic concept as cast(auto) except "to" allows for more "sanity" checking. I'd have to think more about cases where cast(auto) would be useful but this is starting to take too much of my time so I'll leave that to other people if they want to take time to do so. I've invested enough time into this and if no one else wants to support it then no big deal. Like I said, this would only be a minor convenience.

Now I'm not saying that cast(auto) is good in all cases, I'm just trying to get you to see the big picture here. cast(auto) could be useful and could help prevent maintenance bugs in SOME cases.
i see that `cast` should NOT be used in that cases at all. and this
returns us to "`cast` is hack. avoid the hacks!"

Yes it can be misused, but I don't agree that making it harder to use is a good way to prevent misusage, but requiring more verbosity is good. You may disagree that "cast" is enough verbosity but I think that's a matter of opinion.
sure, i'm just talking about what i see as "good", i'm in no way trying to tell that my opinion is the best one. sorry if my words are too "forcing". i'm a somewhat sarcastic person IRL, and i don't use English in my everyday life, so i can sound too hard sometimes, failing to
properly translate my twisted style of writing. ;-)

I don't mind your style of writing, some people might be offended by it but it doesn't bother me. When discussing technical details it takes a lot of effort to be polite and I'd rather you spend that effort in making the details more correct rather then trying to be "tactful".

Reply via email to