On Wednesday, 28 June 2017 at 09:16:22 UTC, Guillaume Piolat wrote:
On Wednesday, 28 June 2017 at 02:13:10 UTC, Jonathan M Davis wrote:
There are definitely cases where finalizers make sense. Case in point: if you have a socket class, it makes perfect sense for it to have a finalizer. Yes, it's better to close it manually, but it will work just fine for the GC to close it when finalizing the class object so long as you don't use so many sockets that you run out before the GC collects them. So, having a finalizer is a good backup to ensure that the socket resource doesn't leak.

- Jonathan M Davis

So far everyone is ignoring my example when A needs B to be destroyed. This happens as soon as you use DerelictUtil for example.

And I'm gonna rant a little bit more.

Deterministic destruction is a _solved_ problem in C++, and a number of users to convert are now coming from C++.

We should:
1. be honest and tell things as they are: it's more complicated than in C++, but also liberating when you know to juggle between GC and deterministic 2. Avoid making bogus suggestions which don't always work, such as close() methods, releasing resource with GC, . They only work for _some_ resources. 3. Suggest a systematic, always working, workaround (or language change such as "GC doesn't call ~this). C++ users have no difficulty having an object graph with detailed ownership schemes, that's what they do day in day out.

It's important to have a _simple_ story about resource release, else we will talk about "GC" every day, and hearing about "GC" is bad for marketing.


Reply via email to