Steven D'Aprano <st...@remove-this-cybersource.com.au> writes: > On Fri, 05 Nov 2010 12:17:00 +0000, Mark Wooding wrote: > > Right; so a half-decent compiler can notice this and optimize > > appropriately. Result: negligible difference. > > Perhaps the biggest cost is that now your language has inconsistent > semantics: some function defaults are set on every call, and some are set > once, when the function is defined, and the choice between the two > happens via "magic" -- the compiler decides what to do, you don't.
The /semantics/ are indistinguishable. The implementations are different, and I'll grant that the performance model is more complex for optimized DIC. > I have mixed feelings about compiler optimizations. Things like constant > folding seems to be both harmless and useful, but other optimizations not > so much. It sets up a discrepancy between what the source code does and > what the compiled code does, and in the case of (say) floating point > code, can introduce *serious* bugs. Oooh, careful now. It's important not to muddle semantics-preserving transformations (like memoizing constant immutable objects, as I'm suggesting, or constant folding) and tolerated semantics-altering transformations such as increasing precision of intermediate floating-point values. (`Tolerated' here means that some language specifications grant specific permission for these optimizations despite the fact that they don't preserve semantics.) Semantics-altering optimizations are scary, to be approached only with great trepidation. Semantics-preserving optimizations are nearly free, except for the potentially complicated performance model. > > _missing = ['missing'] > > A curious choice for the sentinel value. We're not using Python 1.5 any > longer :) Two reasons. Firstly, this comes from my Lisp background: making a list is the obvious way of producing an unforgeable object. Secondly, if you see an objects that prints as ['missing'], you have a chance of working out where it came from; for a loose object() that's kind of hard without a wabbit hunter. -- [mdw] -- http://mail.python.org/mailman/listinfo/python-list