Communications of the ACM
A LISP garbage-collector for virtual-memory computer systems
Communications of the ACM
The next 700 programming languages
Communications of the ACM
The Theory and Practice of Transforming Call-by-need into Call-by-value
Proceedings of the Fourth 'Colloque International sur la Programmation' on International Symposium on Programming
A combinator-based compiler for a functional language
POPL '84 Proceedings of the 11th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Super-combinators a new implementation method for applicative languages
LFP '82 Proceedings of the 1982 ACM symposium on LISP and functional programming
A fixed-program machine for combinator expression evaluation
LFP '82 Proceedings of the 1982 ACM symposium on LISP and functional programming
Static evaluation of functional programs
SIGPLAN '86 Proceedings of the 1986 SIGPLAN symposium on Compiler construction
An instruction fetch unit for a graph reduction machine
ISCA '86 Proceedings of the 13th annual international symposium on Computer architecture
A RISC architecture for symbolic computation
ASPLOS II Proceedings of the second international conference on Architectual support for programming languages and operating systems
On strictness and its analysis
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Demand-Driven Interpretation of FP Programs on a Data-Flow Multiprocessor
IEEE Transactions on Computers - Special issue on architectural support for programming languages and operating systems
Lazy evaluation and the logic variable
ICS '88 Proceedings of the 2nd international conference on Supercomputing
A fresh look at combinator graph reduction
PLDI '89 Proceedings of the ACM SIGPLAN 1989 Conference on Programming language design and implementation
Executing a Program on the MIT Tagged-Token Dataflow Architecture
IEEE Transactions on Computers
On laziness and optimality in lambda interpreters: tools for specification and analysis
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Compilation as partitioning: a new approach to compiling non-strict functional languages
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Parallel graph reduction with the (v , G)-machine
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
An abstract machine for parallel graph reduction
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Compilation of functional languages by program transformation
ACM Transactions on Programming Languages and Systems (TOPLAS)
A syntactic approach to program transformations
PEPM '91 Proceedings of the 1991 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Cache behavior of combinator graph reduction
ACM Transactions on Programming Languages and Systems (TOPLAS)
Fast parallel implementation of lazy languages—the EQUALS experience
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
Lively linear Lisp: “look ma, no garbage!”
ACM SIGPLAN Notices
A natural semantics for lazy evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A RISC processor architecture with a versatile stack system
ACM SIGARCH Computer Architecture News - Special issue on input/output in parallel computer systems
Strictness optimization for graph reduction machines (why id might not be strict)
ACM Transactions on Programming Languages and Systems (TOPLAS)
Interprocedural register allocation for lazy functional languages
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
Lag, drag, void and use—heap profiling and space-efficient compilation revisited
Proceedings of the first ACM SIGPLAN international conference on Functional programming
The spineless tagless G-machine, naturally
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Within ARM's reach: compilation of left-linear rewrite systems via minimal rewrite systems
ACM Transactions on Programming Languages and Systems (TOPLAS)
Tracing piece by piece: affordable debugging for lazy functional languages
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
NORMA: a graph reduction processor
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
Lazy rewriting on eager machinery
ACM Transactions on Programming Languages and Systems (TOPLAS)
Cheap eagerness: speculative evaluation in a lazy functional language
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Symbolic Functional Evaluation
TPHOLs '99 Proceedings of the 12th International Conference on Theorem Proving in Higher Order Logics
Proving the Correctness of the STG Machine
IFL '02 Selected Papers from the 13th International Workshop on Implementation of Functional Languages
Algebraic query optimisation for database programming languages
The VLDB Journal — The International Journal on Very Large Data Bases
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
Sequent combinators: a Hilbert system for the lambda calculus
Mathematical Structures in Computer Science
How to look busy while being as lazy as ever: the Implementation of a lazy functional debugger
Journal of Functional Programming
The call-by-need lambda calculus
Journal of Functional Programming
Deriving a lazy abstract machine
Journal of Functional Programming
Efficient compilation of lazy evaluation
ACM SIGPLAN Notices - Best of PLDI 1979-1999
Making a fast curry: push/enter vs. eval/apply for higher-order languages
Proceedings of the ninth ACM SIGPLAN international conference on Functional programming
An environment for maintaining computation dependency in XML documents
Proceedings of the 2005 ACM symposium on Document engineering
Making a fast curry: push/enter vs. eval/apply for higher-order languages
Journal of Functional Programming
A history of Haskell: being lazy with class
Proceedings of the third ACM SIGPLAN conference on History of programming languages
Structure and Properties of Traces for Functional Programs
Electronic Notes in Theoretical Computer Science (ENTCS)
Explaining the lazy Krivine machine using explicit substitution and addresses
Higher-Order and Symbolic Computation
Central European Functional Programming School
Introducing the PilGRIM: a processor for executing lazy functional languages
IFL'10 Proceedings of the 22nd international conference on Implementation and application of functional languages
AMaχoS: abstract machine for Xcerpt: architecture
PPSWR'06 Proceedings of the 4th international conference on Principles and Practice of Semantic Web Reasoning
Towards the uniform implementation of declarative languages
Computer Languages
Optimizing structural recursion in functional programs
Computer Languages
Hi-index | 0.00 |
This paper describes the principles underlying an efficient implementation of a lazy functional language, compiling to code for ordinary computers. It is based on combinator-like graph reduction: the user defined functions are used as rewrite rules in the graph. Each function is compiled into an instruction sequence for an abstract graph reduction machine, called the G-machine, the code reduces a function application graph to its value. The G-machine instructions are then translated into target code. Speed improvements by almost two orders of magnitude over previous lazy evaluators have been measured; we provide some performance figures.