Question about publishing a useful function I have written
Andre Pany
andre at s-e-a-p.de
Wed Jul 15 12:37:21 UTC 2020
On Wednesday, 15 July 2020 at 09:31:27 UTC, Cecil Ward wrote:
> On Tuesday, 14 July 2020 at 23:10:28 UTC, Max Haughton wrote:
>> On Tuesday, 14 July 2020 at 21:58:49 UTC, Cecil Ward wrote:
>>> I have written something which may or may not be novel and
>>> I’m wondering about how to distribute it to as many users as
>>> possible, hoping others will find it useful. What’s the best
>>> way to publish a D routine ?
>>>
>>> [...]
>>
>> GitHub is the best place to publish code. Does GDC actually
>> use the optimization? I tried something like that before but I
>> couldn't seem to get it to work properly.
>
> On Tuesday, 14
> ]
>
> I just tried an experiment. It seems that in release mode
> assert()s are realised as absolutely nothing at all, and so the
> _conditions_ in the asserts are not declared. So later
> generated code does not have the benefit of knowledge of
> asserted truth conditions in release mode. So in release mode,
> without these truth conditions being established, the code
> generated (apart from the asserts’ code) can be _worse than in
> debug mode_, which seems bizarre, but it’s true.
>
> for example
> assert( x < 100 );
> …
> if ( x==200 ) // <— evaluates to false _at compile time_
> {
> // no code generated for this block in debug mode,
> // but is generated in release mode
> }
> …
> if ( x < 100 ) // <— no code generated for if-test as cond
> == true at compile-time
This is by intention. While exceptions are used for resources
like user input/file system/network,... you use asserts to
validate your code.
When you publish your code to the world, the assertions have
"done" their work and there is no need to include them in a
release build.
Cases where you need asserts in release builds are an indicator,
that you should have used exceptions instead.
Kind regards
Andre
More information about the Digitalmars-d-learn
mailing list