core.stdc.stdlib._compare_fp_t and qsort

Adam D. Ruppe destructionator at gmail.com
Mon Mar 12 03:20:43 UTC 2018


On Monday, 12 March 2018 at 02:44:17 UTC, Joe wrote:
> I saw the extern(C) and I believe I tried it before my previous 
> post, but dismissed it because I saw no difference in compiler 
> behavior.

Yeah, the compiler should just tell you what specifically it is 
complaining about instead of making you hunt. These "no function 
match" errors are actually my #1 pain point as a daily D user... 
and as a regular D tech support rep, I see there are very 
frequent problems for everyone else too.

> Could you explain or direct me to something that elucidates why 
> the "scope" qualifiers are needed?  And is there something else 
> that is necessary inside compar() or are the "scope"s just for 
> decorative purposes?

So `scope` means you promise not to escape the reference outside 
your scope; that you won't store the pointers somewhere else for 
future use.

It is defined here: 
https://dlang.org/spec/function.html#parameters tho that's pretty 
light.

The compiler only checks it if you throw some random 
-dipsomething switch. The idea is something similar to Rust's 
borrow checker. It aims to make it a compile error to sneak out 
pointers to temporaries through our callback. You wouldn't do 
that anyway with a compare function, but now it is an error to 
try ( if the strict enforcement thing is thrown. and i don't 
remember the name, they are all random dip numbers on the 
switches)

I'm actually mildly against adding these directly to C functions, 
but this attribute spam is being added to all the druntime 
definitions. It requires stuff like nothrow and nogc on a bunch 
of handlers too, ugh, but the idea behind it is to make sure you 
don't break the C function's documented rules, but here checked 
by the D compiler without needing any runtime wrappers/checks.



But until recently it wasn't checked at all which is why I wasn't 
sure if that was causing your error. I guess it is required to 
match the function call even if the strict enforcement isn't 
thrown now.


More information about the Digitalmars-d-learn mailing list