C Sharp

Composition

Any time you take an object that requires deterministic finalization and store it in an object that doesn't, you've lost the determinism (because determinism is not transitive). The problem is that this strikes at the heart of the class hierarchy. For example, what about arrays? If you want arrays of deterministic objects, arrays need to be deterministic. And what about collections and hash tables? The list goes on-before you know it, the entire class library is reference counted, thereby defeating the purpose.

Another alternative was to bifurcate (or split into two branches) the .NET Framework class library and have two versions of many types of classes-for example, deterministic arrays and nondeterministic arrays. This was seriously considered. However, the final decision was that having two copies of the entire framework would be confusing, perform horribly-two copies of every class would be loaded-and in the end wouldn't be practical.

Specific solutions to specific classes were examined, but none of these solutions came close to being a general purpose solution scalable for the entire framework. Making the fundamental problem-if a nondeterministic object contains a reference to a deterministic one, the system is not deterministic-an error was also considered, but it was concluded that this restriction would make it difficult to write real programs.