Respecting Abstraction

memory management is an optimization, not a requirement.

Sadly, no. I’ve just been spending a few days on a C# application that has a few cyclic references and forgotten unsubscribes to events that lead to the application grinding to a really slow state that did not quite halt over the course of a few hours. The cause? Somebody didn’t get it and just assumed the garbage collector “would get it”. Well… it didn’t. Not to mention what happens when you leak too many native resources, where at some point you have leaked the full set before a GC and your app comes crashing down - in a completely unrelated operation.

.NET is no alternative to resource management - you’d need to learn it better now that your language somewhat allows sloppy work.

I’ve been saying for a while that C# is basically C++ minus the template metaprogramming, but with a few much more complex things thrown in (think yield return, IL Emit, reflection, stuff like that). C# is not for people who consider C++ too complex - it’s for people who’d like just a bit more mess that is less debuggable.