On Friday, 16 May 2014 at 00:27:34 UTC, Andrei Alexandrescu wrote:
On 5/15/14, 2:52 PM, Timon Gehr wrote:
On 05/15/2014 08:03 PM, Andrei Alexandrescu wrote:

Purity of allocation is frequently assumed by functional languages

Examples?

cons 1 2 is equal to cons 1 2
...

I don't see anything whose specification would need to mention
'allocation'.

That's the point. There's no specification of allocation - the evaluator may create two lists or reuse the same, and it's all transparent.

because without it it would be difficult to get much work done.

Why?

It's rather obvious. You've got to have the ability to create new values
in a pure functional programming language.

This kind of operational reasoning is not essential. Of course, in practice you want to evaluate expressions, but the resulting programs are of the same kind as those of a non-pure language, and can do the same kind of operations. There is not really a distinction to be made at
that level of abstraction.

I'm afraid I got lost here.

I believe Timon's point is that allocation is an implementation detail, just like the existence of registers, memory caches, and the stack. Those things need not exist to perform the computation and as a result there is no need to assume anything about their purity (as far as the language is concerned, they don't exist).

D dropped the ball (perhaps) by making memory allocation real. If 'new' was just defined to create a new object without specifying (directly or indirectly) that it lived in memory and had an address that could be compared then the allocation of memory would be an implementation detail invisible to the language, and that would allow "true" purity, and the optimisation opportunities that come with it.

Reply via email to