Future of D 2.x as stable/bug fix, and what's next for D 3.x
Ola Fosheim Grøstad
ola.fosheim.grostad at gmail.com
Thu Sep 3 16:36:46 UTC 2020
On Wednesday, 2 September 2020 at 14:09:12 UTC, bachmeier wrote:
> being garbage collected. You can use the GC to allocate data in
> @nogc functions, but only if it's returned to a call that was
> made from non- at nogc code.
So you are thinking about context-aware templates, that can query
the properties of the call-chain? That is an interesting idea for
static analysis indeed. Many things to consider though, when you
have concurrency-mechanisms like coroutines.
There are many interesting things can be done to improve memory
management for most languages, but one has to figure out what
kind of constraints one are willing to impose on the language! If
anything should be possible (on the low level) then that can
inhibit some nice optimizations. For a GC-language you want to
impose constraints on the language that some might considered
inappropriate for writing and operating system kernel (most
people don't write those, so it is not unreasonable to define
writing kernels as out-of-scope for a language).
E.g. What happens if someone loads the whole file to GC-memory
and then retains a pointer to a tiny slice of it. Can the runtime
know that only that specific slice is "live"? If it can, then it
can release the unused parts surrounding the slice (the big bulk
of allocated memory). Can the runtime prove that there is only
one reference to the slice? Then it can move it (compaction).
But the language semantics has to be hashed out very clearly and
formally to do neat things like that safely (or to do them
efficiently).
You basically need a very clear specification of what low level
actions are defined as creating "undefined behaviour". You
probably also need to introduce some constraints that some users
will object to.
More information about the Digitalmars-d
mailing list