I've just finished reading the beginning of an interesting article on software reliability at: http://users.adelphia.net/~lilavois/Cosas/Reliability.htm#Abstract There is one small part that cought my attention b/c something similar came up recently in regards to pass-by reference. "... all connectors should be unidirectional, i.e., they should be either male (sender) or female (receiver). This will eliminate mix-ups and ensure robust connectivity." It was mentioned the previous thread that purely pass-by-value is arguably the most "proper". But as we all know it is inefficient --having to copy an object going in only to turn around and reassign it whence it came: a = amethod(a.dup) So I'm wondering might it be possible for the language itself to be intelligent enough to work as if it were pass-by-value, but catch situations like the above and work with them on a pass-by reference bases for efficency, all the while using a pass-by-reference-to-value under the hood like Ruby currently uses? In other words, no matter how it works underneath, for the end-programmer the left side should always be male-output and the right female-input, and never the twain shall meet. T.