Originally Posted by
CornedBee
I saw no such implication. I interpreted the question as a simple, "Why would any language choose not to have deterministic destructors?"
And the answer is that they are simply incompatible with automatic, cycle-capable, efficient garbage collection. If you don't have cycle-capable garbage collection, you can't make it automatic; the risk of bugs is too high, and the programmer can't really do anything about it. Examples: the infamous cycle bug in IE's JavaScript garbage collector, where you would get a massive memory leak if you had a cycle between a native JS object and a DOM node. Also, the extremely naive garbage collector in Warcraft 3's map scripting language.
Similarly, if you have inefficient garbage collection, you're in trouble too. Java 1 was a complete failure on the desktop because of its poor GC implementation; every few seconds or minutes (depending on the load), the application would actually hang for a moment while the GC ran. This (and the not very efficient interpreter) gave Java a reputation for slowness that it still hasn't fully shaken to this day.
The problem is, nobody has yet come up with an efficient, cycle-capable, automatic garbage collector that allows deterministic destruction.