Make using compiled libs with debug code better

Steven Schveighoffer schveiguy at gmail.com
Tue Oct 19 13:57:31 UTC 2021


On 10/18/21 5:51 PM, Elronnd wrote:
> On Monday, 18 October 2021 at 13:04:47 UTC, Steven Schveighoffer wrote:
>> Would it be a reasonable thing to change contracts to be called by the 
>> caller instead of the callee? Is that something that could make its 
>> way into D, such that the input checking of functions that are 
>> compiled for release still can run when you compile your code in 
>> non-release mode?
> 
> What if I take a pointer to a function with contracts and call it from 
> someplace that doesn't know about those contracts?

A good point. There are also issues with virtual functions along these 
lines.

The only thing I can think of is to compile the contract code, provide 2 
entry points for the function, and let the caller pick the one they 
want. This would have the same effect.

> 
> Better to leave assertions on by default, and make you have to go out of 
> your way to turn them off.  IMO.

This would leave Phobos in pretty bad shape for performance. Especially 
with invariants. I know for instance that RedBlackTree has an invariant 
that validates the tree correctness on every operation (and this runs 
before and after every function). However, if you build your project 
with dub, every library you depend on (with source available) will be 
built the same as your application. So Phobos is kind of alone in this 
regard based on the way we distribute libraries.

I'm not sure what the right answer is, but that is what this thread is 
for -- can we solve this in a non-disruptive or minimally-disruptive way?

-Steve


More information about the Digitalmars-d mailing list