Software—Practice & Experience
Views: a way for pattern matching to cohabit with data abstraction
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
The definition of Standard ML
PLDI '91 Proceedings of the ACM SIGPLAN 1991 conference on Programming language design and implementation
ML for the working programmer
Elements of functional programming
Elements of functional programming
Unboxed values as first class citizens in a non-strict functional language
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Compiling with continuations
Report on the programming language Haskell: a non-strict, purely functional language version 1.2
ACM SIGPLAN Notices - Haskell special issue
Unboxed objects and polymorphic typing
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Using Hindley-Milner type inference to optimise list representation
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
Compact Encodings of List Structure
ACM Transactions on Programming Languages and Systems (TOPLAS)
An empirical study of list structure in Lisp
Communications of the ACM
List processing in real time on a serial computer
Communications of the ACM
Communications of the ACM
Compact list representation: definition, garbage collection, and system implementation
Communications of the ACM
Compiling a functional language
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
Rabbit: A Compiler for Scheme
List structure: measurements, algorithms, and encodings.
List structure: measurements, algorithms, and encodings.
Using Hindley-Milner type inference to optimise list representation
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
A polymorphic record calculus and its compilation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Purely functional random-access lists
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
A probabilistic approach to the problem of automatic selection of data representations
Proceedings of the first ACM SIGPLAN international conference on Functional programming
An Unboxed Operational Semantics for ML Polymorphism
Lisp and Symbolic Computation
Automatic inline allocation of objects
Proceedings of the ACM SIGPLAN 1997 conference on Programming language design and implementation
A systematic study of functional language implementations
ACM Transactions on Programming Languages and Systems (TOPLAS)
An evaluation of automatic object inline allocation techniques
Proceedings of the 13th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Field analysis: getting useful and low-cost interprocedural information
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
An automatic object inlining optimization and its evaluation
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Optimizing Nested Loops Using Local CPS Conversion
Higher-Order and Symbolic Computation
IFL '02 Selected Papers from the 13th International Workshop on Implementation of Functional Languages
Proceedings of the ninth ACM SIGPLAN international conference on Functional programming
Journal of Functional Programming
Higher-Order and Symbolic Computation
IFL'02 Proceedings of the 14th international conference on Implementation of functional languages
Hi-index | 0.00 |
Lists are ubiquitous in functional programs, thus supporting lists efficiently is a major concern to compiler writers for functional languages. Lists are normally represented as linked cons cells, with each cons cell containing a car (the data) and a cdr (the link); this is inefficient in the use of space, because 50% of the storage is used for links. Loops and recursions on lists are slow on modern machines because of the long chains of control dependencies (in checking for nil) and data dependencies (in fetching cdr fields).We present a data structure for “unrolled lists”, where each cell has several data items (car fields) and one link (cdr). This reduces the memory used for links, and it significantly shortens the length of control-dependence and data-dependence chains in operations on lists.We further present an efficient compile-time analysis that transforms programs written for “ordinary” lists into programs on unrolled lists. The use of our new representation requires no change to existing programs.We sketch the proof of soundness of our analysis—which is based on refinement types—and present some preliminary measurements of our technique.