D not considered memory safe
Walter Bright
newshound2 at digitalmars.com
Fri Jul 19 18:19:38 UTC 2024
On 7/13/2024 2:46 PM, Timon Gehr wrote:
> Well, your suggestion was to put @trusted _everywhere_, not only on functions
> with a safe interface. As Dennis points out, it seems that is exactly what
> happened in some instances.
That is correct.
> Anyway, `@trusted` indicates that whoever put it there reviewed the
> implementation for memory safety. This makes this approach impractical.
You could call it unwise, or a footgun, or introducing technical debt. But it is
practical.
If a surgeon wants to fix a man's heart, first he's going to make things worse
by slicing him open like a side of beef.
If a mechanic wants to rebuilt an engine, first he has to dismantle a fair chunk
of the car, making things worse.
> The solution is to remove the unsafe constructs and then mark everything safe in
> one go. The compiler currently cannot assist with this very well, but it is easy
> to do. It should just have a way to enable non-transitive safety checks.
In my experience with large, complex programs, cyclical program flow, that is
not practical. I wish it was practical.
> In a data-driven way. They enabled the checks that do not cause too much pain to
> users. OpenD is a big monorepository with DMD, LDC, and most of the packages
> that people actually use, so breaking changes actually require breakage to be
> fixed as well.
I also incrementally fix @safe issues, by making a function temporarily @safe,
and fixing what I can. But that does not solve the cyclical dependency problems.
> Anyway, non-transitive checks can be a useful tool for all function attributes,
> and they have the benefit of not over-specifying their guarantees. This can even
> be done with pragmas. I implemented a simple pragma to (non-transitively) error
> out on implicit GC allocations, and it was helpful for performance optimization.
An easier way is just add `@nogc:`, fix all the errors you need to, then remove it.
> Well, if the goal is incremental migration to `@safe`, a process of enabling
> non-transitive safety checks on a function-by-function basis and then later
> making it transitive is much more baked than random application of @trusted, and
> it completely bypasses any issues with big cyclic call graphs.
There is a way:
1. add @safe:
2. fix what you can
3. remove @safe:
No new features required.
More information about the Digitalmars-d
mailing list