digitalmars.D - DIP1028 and phobos
- Uknown (21/21) May 22 2020 With DIP 1028 finally being accepted, we now have @safe by
- Steven Schveighoffer (6/29) May 23 2020 They shouldn't be @system. It's probably just an example of lazy
- Uknown (8/39) May 23 2020 They were marked @system because the are global and apparently
With DIP 1028 finally being accepted, we now have safe by default. If we ignore the extern function controversies around the DIP for a second, its worth looking at some of the other issues that DIP 1028 brings. Consider the following trivial code: void main(string args[]) safe { import std.stdio : stderr; if (args.length != 2) { stderr.writeln("usage: %s filename"); return; } } This does not compile, because stderr, stdin and stdout are all marked system. Technically, I understand why they are marked system, but practically, most people would expect something like this to Just Work, without having to mark main system, or use () trusted {...}(); I think given DIP 1000 and DIP 1028, its worth looking into phobos and reviewing other "trivial" stuff that should work with safe but doesn't, and coming up with ways to fix them.
May 22 2020
On 5/23/20 1:16 AM, Uknown wrote:With DIP 1028 finally being accepted, we now have safe by default. If we ignore the extern function controversies around the DIP for a second, its worth looking at some of the other issues that DIP 1028 brings. Consider the following trivial code: void main(string args[]) safe { import std.stdio : stderr; if (args.length != 2) { stderr.writeln("usage: %s filename"); return; } } This does not compile, because stderr, stdin and stdout are all marked system. Technically, I understand why they are marked system, but practically, most people would expect something like this to Just Work, without having to mark main system, or use () trusted {...}();They shouldn't be system. It's probably just an example of lazy programmers not fixing stuff that hasn't complained yet.I think given DIP 1000 and DIP 1028, its worth looking into phobos and reviewing other "trivial" stuff that should work with safe but doesn't, and coming up with ways to fix them.For sure, we will not be turning on safe by default until Phobos and druntime are made to work with it. -Steve
May 23 2020
On Saturday, 23 May 2020 at 12:00:40 UTC, Steven Schveighoffer wrote:On 5/23/20 1:16 AM, Uknown wrote:They were marked system because the are global and apparently not thread safe in some cases. I think there was a PR to fix it a long time ago, but it was put on hold for shared to be fixedWith DIP 1028 finally being accepted, we now have safe by default. If we ignore the extern function controversies around the DIP for a second, its worth looking at some of the other issues that DIP 1028 brings. Consider the following trivial code: void main(string args[]) safe { import std.stdio : stderr; if (args.length != 2) { stderr.writeln("usage: %s filename"); return; } } This does not compile, because stderr, stdin and stdout are all marked system. Technically, I understand why they are marked system, but practically, most people would expect something like this to Just Work, without having to mark main system, or use () trusted {...}();They shouldn't be system. It's probably just an example of lazy programmers not fixing stuff that hasn't complained yet.Yeah, I just think its worth documenting all these, so its easy to see what's still to be done. Some of the fixes might be easy, so it could be even be good "beginner patches" stuffI think given DIP 1000 and DIP 1028, its worth looking into phobos and reviewing other "trivial" stuff that should work with safe but doesn't, and coming up with ways to fix them.For sure, we will not be turning on safe by default until Phobos and druntime are made to work with it. -Steve
May 23 2020