Safer D is implemented!
Andrej Mitrovic
andrej.mitrovich at gmail.com
Sun Dec 29 12:34:46 UTC 2024
On Sunday, 29 December 2024 at 12:22:42 UTC, Andrej Mitrovic
wrote:
> On Thursday, 28 November 2024 at 07:08:29 UTC, Walter Bright
> wrote:
>> https://github.com/dlang/dmd/pull/17044
>>
>> It's enabled with -preview=safer
>>
>
> I think this is going to still cause issues with dependencies,
> which might just be a dub problem but I'm not sure.
>
> For example I've tried to add `dflags `-preview=safer` to my
> dub.sdl and now I get errors from 3rd party libraries:
>
> ```
> lib\bindbc-glfw\source\bindbc\glfw\binddynamic.d(326,24):
> Error: `name.ptr` cannot be used in `@safe` code, use
> `&name[0]` instead
> lib\bindbc-glfw\source\bindbc\glfw\binddynamic.d(342,33):
> Error: `@safe` function `loadGLFW` cannot access `__gshared`
> data `glfwInit`
> lib\bindbc-glfw\source\bindbc\glfw\binddynamic.d(342,20):
> Error: cast from `extern (C) int function() nothrow @nogc*` to
> `void**` not allowed in safe code
> lib\bindbc-glfw\source\bindbc\glfw\binddynamic.d(343,33):
> Error: `@safe` function `loadGLFW` cannot access `__gshared`
> data `glfwTerminate`
> lib\bindbc-glfw\source\bindbc\glfw\binddynamic.d(343,20):
> Error: cast from `extern (C) void function() nothrow @nogc*` to
> `void**` not allowed in safe code
> lib\bindbc-glfw\source\bindbc\glfw\binddynamic.d(344,33):
> Error: `@safe` function `loadGLFW` cannot access `__gshared`
> data `glfwGetVersion`
> ```
>
> Still it's a great step forward, thanks for your work~
So essentially this might even work fine if I used .di
dependencies instead of .d, as that would hide the implementation
code from the compiler so it couldn't do any analysis (never mind
that nobody uses .di).
But with templates it wouldn't be a workable solution anyway.
I don't see how anyone is going to try and use -preview=safer
*unless* they are able to use other libraries which are ready for
this switch. But most libraries will not be ready for it.
Therefore people who use libraries will not be able to enable
this switch.
Therefore this is a catch-22 problem.
I don't know if it's possible to limit certain switches to
particular packages, but I would prefer if I could enable the
`-preview=safer` switch *only* for code within `./src`.
In other words code I directly have control over. Is that
possible with dub..?
More information about the Digitalmars-d-announce
mailing list