[Ur] Memory allocation for purely functional code

Adam Chlipala adamc at csail.mit.edu
Sun Mar 29 08:00:40 EDT 2015


On 03/29/2015 04:52 AM, Sergey Mironov wrote:
> What memory allocation mechanism does Ur/Web use for making
> nested purely-functional calls?

It's all region-based memory allocation, a scheme not really designed 
for intensive computation with many intermediate results.

> What can I do to reduce the memory consumption?

Structure your code so that many intermediate computations have types 
like [int], so that the compiler sees that intermediate values can be 
freed safely afterward.  The same optimization applies hierarchically 
for trees of nested computations, where many [int]s are computed using 
many intermediate [int]s, etc.

The general rule is that intermediate values are freed after 
computations of types built out of [int], [float], etc. using further 
layers of record types.



More information about the Ur mailing list