What should happen when the assert message expression throws?

Quirin Schroll qs.il.paperinik at gmail.com
Fri Nov 25 09:33:21 UTC 2022


On Friday, 25 November 2022 at 08:12:41 UTC, Dukc wrote:
> What does "best-effort" mean?

Generally, it means that a procedure is not a complete or ideal 
solution and won’t always give you what you need (even if it 
theoretically could), but still covers common and simple cases 
and maybe some of the uncommon or complicated ones. Usually, 
best-effort solutions are subject to incremental improvements.

A simple example for best effort is compiler error messages: 
Usually, they’re pointing you to the spot where you change 
something and it works. Sometimes, the error is nowhere the error 
message indicates.

Another example well-known to many D programmers that is both, 
best-effort and ideal, is `@safe`. It intends to be a complete 
(or ideal) solution in the sense that when checking for `@safe` 
succeeds, the code has no UB (give or take `@trusted`, of 
course). A compiler that accepts UB in `@safe` code has a bug!
On the other hand, `@safe` is best-effort in the sense that it 
does not even intend to cover all non-UB code. There will always 
be (rather simple) code for which *you* can (rather easily) prove 
that it is indeed free of UB, but the compiler’s `@safe` checks 
reject it. The language development goes into the direction of 
recognizing more and more of non-UB code as `@safe` (DIP 1000 
most notably), but it will never be able to cover the entirety of 
non-UB because that would equate to solving the [halting 
problem](https://en.wikipedia.org/wiki/Halting_problem), which is 
provably impossible. Because it *ideally* would be, but 
mathematically can’t, and even in cases where there is a proof 
showing no UB, it’s not intended the compiler finds it, because 
practically, it’s not worth it, it is a best-effort solution.

I don’t think “best-effort” is used here with any more special 
meaning.


More information about the Digitalmars-d mailing list