arXiv.itsnick.co

an independent field guide to 23 million papers from arXiv & OpenAlex — not affiliated with arXiv.org

Computer Science · Artificial Intelligence

On the implementation of recursion in call-by-value functional languages

Tom Hirschowitz, Xavier Leroy, J. B. Wells

· HAL (Le Centre pour la Communication Scientifique Directe)

See on the map

Abstract

Functional languages encourage the extensive use of recursive fonctions and data structures. It is therefore important that they eciently implement recursion. In this paper, we formalize and improve a known implementation technique for recursion. The original technique was introduced by Cousineau and Mauny as the in-place updating trick. Consider a list of mutually recursive denitions. The technique consists in allocating a dummy, uninitialized heap block for each recursive denition. The size of these blocks is guessed from the shape of each denition. Then, the right-hand sides of the denitions are computed. Recursively-dened identiers thus refer to the corresponding dummy blocks. This leads, for each denition, to a block of the expected size. Eventually, the contents of the obtained blocks are copied to the dummy blocks, updating them in place. The only change we propose to this scheme is to update the dummy blocks as soon as possible, immediately after each denition is computed, thus making it available for further use. At the source language level, the improvement allows to extend the class of expressions allowed as right-hand sides of recursive denitions, usually restricted to syntactic functions. We formalize our technique as a translation scheme to a lambda-calculus featuring in-place updating of memory blocks, and prove the translation to be faithful.

More like this