On Wednesday, 20 May 2015 at 13:54:29 UTC, bitwise wrote:
Yes, but D claims to support manual memory management. It seems
to get second class treatment though.
It's WIP. There were thoughts to run finalizers on the thread
where the object was allocated (I doubt it's a good idea,
though). Anyway, if you're doing manual memory management, how GC
popped up? If you have your manual memory managed with GC, it
means you have a memory leak: manually managed memory shouldn't
become garbage without being freed. I suppose it will be a long
way before D rediscovers .net practices.
I'm pretty sure I can PInvoke malloc in C# too ;)
I use Marshal.AllocHGlobal.
Basically, I can't design a struct and be sure the destructor
will be called on the same thread as where it went out of
scope.
If your resource finalization code has some specific threading
requirements, you implement those yourself in a way your code
requires it. Or instead freeing resources normally in due time.
AFAIK D does not provide any built in functionality like
Objective-C's 'runOnMainThread', which makes this a painful
option.
You asked for destructor being called on the thread where it went
out of scope, which is not necessarily the main thread.