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