Another idiom I wish were gone from phobos/druntime
Atila Neves via Digitalmars-d
digitalmars-d at puremagic.com
Thu Feb 5 01:13:45 PST 2015
On Thursday, 5 February 2015 at 05:42:59 UTC, Meta wrote:
> On Thursday, 5 February 2015 at 01:33:54 UTC, Andrei
> Alexandrescu wrote:
>> On 2/4/15 5:32 PM, deadalnix wrote:
>>> On Thursday, 5 February 2015 at 01:07:56 UTC, Andrei
>>> Alexandrescu wrote:
>>>> Yah, I agree "in" is useful for overridable functions. In
>>>> fact I'd say
>>>> it's useful _only_ for overridable functions.
>>>>
>>>
>>> Putting the contract in the caller is not only useful for
>>> overridable
>>> functions.
>>>
>>> 1/ If a lib is compiled in without contract, but your code is
>>> compiled
>>> with, you get the in contract to run when you call library
>>> code, but not
>>> the assert within the function.
>>>
>>> 2/ The optimizer see the properties of the argument when they
>>> get to the
>>> in contract. This information is lost in the callee, unless
>>> inlining
>>> goes on. that means the amount of contract the optimizer can
>>> remove
>>> statically is greater with in contract.
>>
>> Yah, I understand the potential there. Consider me grudgingly
>> convinced :o). -- Andrei
>
> I don't know about others (besides Beatophile, who religiously
> adheres to writing contacts), but putting contracts on
> functions is a hassle. I never do it unless I'm feeling
> particularly full of divine fervor. It's a lot like making all
> variables that don't need to be changed immutable (another
> thing which only Bearophile seems to do) or properly
> documenting code. Strong optimization guarantees from contracts
> would go a long way in convincing people to actually write them
> (although I guess that's not what you want; Perhaps you changed
> your mind). It's a chicken and egg problem.
I also make all my variables immutable unless I can't. Which is
annoyingly and surprisingly often. Sometimes I have to downgrade
to const (usually because of strings), sometimes I have to rather
sadly go back to auto. I never like it when I do. I should
probably do more contract programming.
immutable is good. immutable is your friend. AFAIC, mutable state
is the root of all evil.
Atila
More information about the Digitalmars-d
mailing list