On Friday, 2 October 2015 at 00:05:33 UTC, Timon Gehr wrote:
On 10/02/2015 01:33 AM, Andrei Alexandrescu wrote:
On 10/01/2015 06:41 PM, Timon Gehr wrote:
On 09/30/2015 03:10 PM, Andrei Alexandrescu wrote:

I encourage making assert smarter seeing (a) it's already used everywhere so the benefits will come for free and (b) it's a built-in.
-- Andrei

About (b): I'm surprised to see that you seem to have so fundamentally
changed your attitude towards magical semantics for built-ins.

I haven't - I still think making "assert" a built-in and ascribing a keyword to it was a minor mistake. But then that sail has shipped, so
let's make the best use of the situation. -- Andrei


Ok, but if assert gets special error printing capabilities that are not available at the same level of convenience to e.g. enforce, then this is a roughly analogous situation to having e.g. B[] : const(A)[] for B : A, which cannot currently be simulated in the library in a satisfactory way. Those situations usually add friction. They tend to result in frustration and often culminate in proposals for new, often ad-hoc language features. IMHO, there ought to be a better way, but I don't have a very strong opinion about this particular case.

On the other hand, changing the language to provide access to this as library would require something macro like, and both Andrei and Walter seems to be really against it.

As we are on assert, 2 things :
- Before considering adding more magic, can we get line numbers in stack traces ? It really seems to me like improving the message no stack trace is available is not focusing on impact. - assert already have a fair amount of magic, notably assert(0) change the way control flow works. Having it as an expression is making everything very convoluted for no reason.

Reply via email to