On Friday, 29 August 2025 at 17:13:21 UTC, Renato Athaydes wrote:
How do I dispose of the string?

```D
static void* hackPtr;

// Use whenever you want to artificially end lifetime of a live variable
// Note that this can't be @live
void leak(T)(T x)
{   // Otherwise the compiler will infer `scope` for x,
    // defeating the purpose.
    if(false) hackPtr = &x;
}

@live void show(scope ref string s) {
  import std.stdio;
  writeln(s);
}

@live void main()
{
    auto s = "foo bar";
    show(s);
    show(s);
//Since it's GC-allocated, "leaking" is how we "free" it in any case.
    leak(s);
}
```

Now, of course the problem is that you could use this `leak` to also "free" a `malloc`ed pointer, in which case it would literally be a memory leak. But at least you're doing it explicitly so you hopefully have a bit better change to spot yourself doing it than without `@live`.

Note that if you do all your allocation with the GC, there's no point in using `@live`. Well, many, me included, are of the opinion it's not worth it even if you don't but I'm still happy to see you test-driving the feature - it's always possible I'm wrong!

Reply via email to