On Wednesday, 31 July 2024 at 16:00:21 UTC, Jonathan M Davis wrote:
DIP 1000 is completely unnecessary if we take the stance that if you want @safe, you use the GC, and any code that you have which can't do that for some reason, you vet and mark as @trusted.

Unfortunately that leads to certain patterns that are safe using dip1000 to now be @trusted. Which might cascade into surrounding code needing to be trusted as well. Overall it's a loss.

I understand not everyone uses those patterns, which are mostly focused on ownership and lifetime, but I have found them to enable so called pit-of-success apis more than anything else.

Contrast that with more 'prescriptive' apis that for instance require a certain ordering of calls or require certain functions to be called at certain points, which are far easier to use incorrectly. Plus they often fail/assert at runtime.

The whole reason that DIP 1000 and @live and the like come into play is basically because Walter wants to try to make dealing with malloc-ed memory @safe

Don't forget the stack. Being able to safely use references to the stack brings at least as much value.

but the cost in terms of language complexity is enormous (and it doesn't really solve the problem anyway, much as it does reduce it). So, DIP 1000 helps, but some of us think that it's far too complex given what it costs

The only two issues I have with dip1000 is that it a) sometimes requires its attributes in seemingly unrelated code, and b) can require some workarounds for its imperfect (practical?) tracking.

Overall though, I have found it is a natural conclusion when you combine lexical lifetimes and references/borrows.

Reply via email to