Rationale for accepting DIP 1028 as is
jmh530
john.michael.hall at gmail.com
Wed May 27 16:38:26 UTC 2020
On Wednesday, 27 May 2020 at 05:49:49 UTC, Walter Bright wrote:
> [snip]
>
> Nothing at all.
>
> But I doubt there is much legacy non-compiling code around.
I cannot speak for all the code out there, but I know of at least
one binding out there [1] that will need to get updated in light
of this DIP.
I also put together a wrapper [2] that sits on top of that
binding (many years ago and no idea if the wrapper still works (I
see no reason why the binding wouldn't), so this probably does
count as legacy code) and calls the binding functions with
templates and no safety annotations. So theoretically, after the
DIP is accepted and without any other changes, nlopt.d becomes
@safe and the binding that calls it also becomes @safe and any
user code that calls it becomes @safe.
***************************
On a separate note, the current definition of @safe is that you
cannot call @system functions. This prevents calling unannotated
extern(C) prototypes from @safe code.
Ignoring DIP 1028 for a second, would you consider changing the
rules so unannotated extern(C) prototypes are @safe instead of
@system without any other change? Just this change by itself
would mean that @safe functions can call unannotated extern(C)
prototypes. Obviously this by itself could be rejected for
special casing. However, I think the underlying question is
should they be safe (ignoring @safe) or not. An argument made
previously is that they should be safe and thus @safe. However, I
think the overwhelming belief is that they are not safe and thus
should not be @safe by default.
From this perspective, you could think of the DIP as doing two
things. 1) it makes unannotated extern(C) prototypes @safe
instead of @system and 2) it makes all other unannotated
functions @safe instead of @system. The big focus is clearly on
#1. You can assume that most people agree with you on #2 and thus
focus the debate on #1
So, do you think unannotated exten(C) prototypes safe? If you
think they are safe, then there is no issue with making them
@safe by default. However, if you do not think they are safe,
then it raises serious concerns to make them @safe by default.
[1]
https://github.com/DlangScience/nlopt/blob/master/source/nlopt.d
[2] https://github.com/jmh530/nloptd/blob/master/source/nloptd.d
More information about the Digitalmars-d-announce
mailing list