checkedint call removal
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jul 30 10:56:46 PDT 2014
On 7/30/14, 9:31 AM, Timon Gehr wrote:
> On 07/30/2014 05:04 PM, Andrei Alexandrescu wrote:
>> On 7/30/14, 4:56 AM, Daniel Murphy wrote:
>>> "Artur Skawina via Digitalmars-d" wrote in message
>>> news:mailman.217.1406713015.16021.digitalmars-d at puremagic.com...
>>>
>>>> `assert` is for *verifying* assumptions. It must not allow them
>>>> to leak/escape. Otherwise a single not-100%-correct assert could
>>>> defeat critical runtime checks.
>>>
>>> All you're saying is you want them to have different names, not that it
>>> can't work the way Walter and I have described. If your assertions are
>>> invalid and you're compiling with -release, the compiler is free to
>>> generate invalid code. -release is dangerous. -release is telling the
>>> compiler that the code you wrote is correct, and it can rely on it to
>>> be correct.
>>
>> Exactly! -- Andrei
>
> This just moves the issue around and gives another term a non-obvious
> meaning (the 'release' switch, which is not called e.g.
> 'unsafeAssumeCorrect'.
Well to me "-release" is "I assume my program is correct, generate the
fastest code for it".
> Which is still confusing, because it purports to
> keep memory safety intact in @safe code by not disabling array bounds
> checks by default). This is the very topic of this discussion: some
> people get confused when they are assumed to use standard terms with
> non-standard meanings. I was objecting to the apparent attitude that
> this is entirely the fault of the one who gets confused, or that it is
> symptomatic for lack of understanding of concepts.
I'm not sure what would be the standard misused term in this case.
> I mean, we have at least:
>
> some terms with whacky meanings for an outsider:
> 'release' which does not relate to a released code version and which is
> not in contrast to 'debug'.
Yeah, it's a sensible point. I don't like that either, but it's a minor
annoyance at most.
> 'const' which does not relate to being a constant.
"Like C++ const, but transitive".
> 'enum' which does not denote enumeration in many contexts where it is used.
Sensible point, but in our use at Facebook I noticed engineers picking
it up without a hitch.
> 'in' which does not only check for membership but rather returns a
> pointer to that member.
It's conveniently terse.
> 'lazy', which denotes pass by name instead of pass by need.
It's not pass by name.
> 'pure' which denies access to mutable static variables and IO.
That's the consequence of functional purity as defined by D. I see
nothing wrong with it.
> ... (some more easily debatable ones removed)
>
>
> some terms with inconsistent meanings:
> 'alias': alias declarations and alias parameters are notably distinct:
> while I can alias a built-in type to a symbol, I cannot pass it by
> alias. The following fails:
>
> template T(alias a){ enum T=2; }
> pragma(msg, T!string);
Agreed.
> (Before debate ensues: I am completely aware of what each of the above
> actually mean and do.)
I think you got a point there but if you searched any programming
language in its pockets you're liable to find a bunch of similar lint.
It's the way it goes - there's a need to maximize expressiveness while
keeping vocabulary and grammatical constructs low. Few of these items
are near the top of my list of issues in D, and I think the same goes
for your list.
> To me, the apt response to a relative newcomer who gets confused by one
> of those or something like them, especially when used without quotation
> marks, is not at all similar to "You're misunderstanding and misusing
> this feature, stop making noise."
Consider this: after considerable effort you are failing to explain your
case for "assume" to the language creators. How do you think you'll fare
with newcomers?
Andrei
More information about the Digitalmars-d
mailing list