On Fri, 8 Sep 2017 08:20 pm, Ben Bacarisse wrote: > Steve D'Aprano <steve+pyt...@pearwood.info> writes: > >> On Fri, 8 Sep 2017 12:28 am, Chris Angelico wrote: >> >>> languages without mutable objects don't >>> really care whether they're pass-by-X or pass-by-Y. >> >> Only if you don't care about efficiency. >> >> Believe me, the first time you pass a five gigabyte array to a function using >> pass-by-value, on a machine with only six gigabytes of memory, you'll care. > > I think your general idea to separate language semantics from > implementation details is a good one, but you've dropped it here. A > language with call-by-value semantics need not copy large objects when > passing them to a function. The program must behave *as if* there is a > copy but there need not actually be one.
You're right: I didn't think of the case where a language simulates pass-by-value semantics without actually copying. I was thinking only of actual pass-by-value implementations. Why would any compiler for a language with immutable arrays actually copy them when passing them to a function? *shrug* Call it a quality of implementation issue. Lots of compilers have sub-optimal implementations. One counter-example might be to implement copy-on-write, in which case the copying can be delayed until the array is written to. (Although Chris did specify languages with immutable data structures, so that's out.) But the larger point that I'm making is that we're not actually doing computation in some abstract, Platonic space of pure mathematics, we're using real computers that have to shunt actual electrons through wires and semiconductors at high speed to do anything. Computation has real costs. We can try to ignore them, but they exist. And even absent mutation, the way you pass arguments has costs to: - the overhead of passing arguments to functions adds up; even a tiny difference in efficiency can make a big difference to the overall speed of the implementation; - as well as the memory consumption; - the amount of work the CPU does, hence your electricity bill; - to say nothing of the Greenhouse gases, the electronic failure rate, etc; - let's not forget the complexity of the compiler and the possibility of bugs. See: https://en.wikipedia.org/wiki/Man_or_boy_test Unless pass-by-X and pass-by-Y have the same costs, somebody somewhere is going to care about the difference. That was my point. I tried to express it humorously rather than pedantically. -- Steve “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list