Abstract
Large functional programs are often constructed by decomposing each big task into smaller tasks which can be performed by simpler functions. This hierarchical style of developing programs has been found to
improve
programmers' productivity because smaller functions are easier to construct and reuse. However, programs written in this way tend to be less efficient. Unnecessary intermediate data structures may be created. More function invocations may be required.
To reduce such performance penalties, Wadler proposed a transformation algorithm, called
deforestation
, which could automatically
fuse
certain composed expressions together in order to eliminate intermediate tree-like data structures. However, his technique is only applicable to a
subset
of first-order expressions.
This paper will generalise the deforestation technique to make it applicable to all first-order and higher-order functional programs. Our generalisation is made possible by the adoption of a model for
safe fusion
which views each function as a producer and its parameters as consumers. Through this model, static program properties are proposed to classify producers and consumers as either safe or unsafe. This classification is used to identify sub-terms that can be safely fused/eliminated. We present the generalised transformation algorithm as a set of syntax-directed rewrite rules, illustrate it with examples, and provide an outline of its termination proof.
Publisher
Association for Computing Machinery (ACM)
Cited by
10 articles.
订阅此论文施引文献
订阅此论文施引文献,注册后可以免费订阅5篇论文的施引文献,订阅后可以查看论文全部施引文献
1. The Long Way to Deforestation: A Type Inference and Elaboration Technique for Removing Intermediate Data Structures;Proceedings of the ACM on Programming Languages;2024-08-15
2. Fusing Direct Manipulations into Functional Programs;Proceedings of the ACM on Programming Languages;2024-01-05
3. Grafs: declarative graph analytics;Proceedings of the ACM on Programming Languages;2021-08-22
4. Postcondition-preserving fusion of postorder tree transformations;Proceedings of the 29th International Conference on Compiler Construction;2020-02-22
5. Towards a Modular Program Derivation via Fusion and Tupling;Generative Programming and Component Engineering;2002