Typical security issues in C++: why the GC isn't your enemy
Siarhei Siamashka
siarhei.siamashka at gmail.com
Mon Dec 12 14:33:21 UTC 2022
On Monday, 12 December 2022 at 12:53:42 UTC, Nick Treleaven wrote:
> What about deprecating defining `main` without a
> @system/@trusted/@safe attribute? Then users have to make a
> choice. If they choose @safe then anything main calls has to
> have a safe interface.
This would be a step in the right direction. But modules don't
have `main`. And it's not ergonomic:
```D
void bar() {
}
void foo() {
bar();
}
void main() @safe {
foo();
}
```
The user will first get a complaint about annotating "foo". And
after this is done, there will be a complaint about "bar" and so
on. Many people will be very much annoyed after a few minutes of
such activity. This can be alternatively resolved by adding
`@safe:` at the top of the file, but the compiler needs to give a
clear hint about this. If this is not done, then many beginners
won't be happy and some of them will quit right from the start.
> I almost never use `@safe:` because it prevents @safe attribute
> inference.
Why is this a problem?
> Of course, if D can encourage/default to using @safe that may
> make the language more popular by helping market it.
D has very effective marketing. It's very good at attracting
attention because the advertisements are spread everywhere in
wikipedia, hackernews and other places. I think that the majority
of software developers (excluding the youngsters) already know
that D language exists and already gave it a try at some point in
the past. But making a good first impression and then managing
not to betray expectations is another story.
Default @safe can prevent beginners from feeling stabbed in the
back if they came looking for a safe language, only to be
surprised by an unexpected out of bounds bug in a -release build.
It's like "LOL, are you kidding?" discovery. And not everyone is
particularly enthusiastic about registering in the forum to ask
questions.
More information about the Digitalmars-d
mailing list