Skip to main content
    • Aa
    • Aa

Implementing lazy functional languages on stock hardware: the Spineless Tagless G-machine

  • Simon L. Peyton Jones (a1)

The Spineless Tagless G-machine is an abstract machine designed to support non-strict higher-order functional languages. This presentation of the machine falls into three parts. Firstly, we give a general discussion of the design issues involved in implementing non-strict functional languages. Next, we present the STG language, an austere but recognizably-functional language, which as well as a denotational meaning has a well-defined operational semantics. The STG language is the ‘abstract machine code’ for the Spineless Tagless G-machine. Lastly, we discuss the mapping of the STG language onto stock hardware. The success of an abstract machine model depends largely on how efficient this mapping can be made, though this topic is often relegated to a short section. Instead, we give a detailed discussion of the design issues and the choices we have made. Our principal target is the C language, treating the C compiler as a portable assembler.

Linked references
Hide All

This list contains references from the content that can be linked to their source. For a full set of references and notes please see the PDF or HTML where available.

A.W. Appel 1987. Garbage collection can be faster than stack allocation. Info. Proc. Lett, 25: 275279.

A.W. Appel 1989. Simple generational garbage collection and fast allocation Software – Practice and Experience, 19: 171183.

H. Baker 1978. List processing in real time on a serial computer. Communications of the ACM, 21: 280294.

A. Bloss , P. Hudak and J. Young 1988. Code optimizations for lazy evaluation. Lisp and Symbolic Computation, 1: 147164.

C. Consel and O. Danvy 1991. For a better support of static data flow. In Hughes J. (editor), Functional Programming Langauges and Computer Architecture, Boston, MA. In volume 523 of Lecture Notes in Computer Science, Springer-Verlag, pp. 496519.

J. Fairbairn and S. Wray 1987. TIM – a simply lazy abstract machine to execute supercombinators. In Kahn G. (editor), Proceedings of the IFIP Conference on Functional Programming Languages and Computer Architecture, Portland, OR. In volume 274 of Lecture Notes in Computer Science, Springer-Verlag, pp. 3445.

P. Fradet and D. Le Metayer 1991. Compilation of functional languages by program transformation. ACM Trans. Programming Languages and Systems, 13 (01).

J. Hughes 1989. Why functional programming matters. The Computer Journal, 32: 98107 (04).

P.Z. Ingerman 1961. Thunks. Communications of the ACM, 4:5558.

H. Kingdon , D. Lester and G.L. Burn 1991. The HDG-machine: a highly distributed graph reducer for a transputer network. Computer Journal, 34:290302.

P.J. Landin 1965. A correspondence between Algol 60 and Church's lambda calculus, Communications of the ACM, 8:158165 (03).

S. Smetsers , E. Nocker , J. van Groningen and R. Plasmeier 1991. Generating efficient code for lazy functional languages. In Functional Programming Languages and Computer Architecture, Boston J. , Hughes (editor).

W. Stoye , T. Clarke and A. Norman 1984. Some practical methods for rapid combinator reduction. In Proc. 1984 ACM Symposium on Lisp and Functional Programming, 159166 (08).

D.A. Turner 1979. A new implementation technique for applicative languages, Software – Practice and Experience, 9:3149.

Recommend this journal

Email your librarian or administrator to recommend adding this journal to your organisation's collection.

Journal of Functional Programming
  • ISSN: 0956-7968
  • EISSN: 1469-7653
  • URL: /core/journals/journal-of-functional-programming
Please enter your name
Please enter a valid email address
Who would you like to send this to? *


Full text views

Total number of HTML views: 0
Total number of PDF views: 8 *
Loading metrics...

Abstract views

Total abstract views: 162 *
Loading metrics...

* Views captured on Cambridge Core between September 2016 - 27th March 2017. This data will be updated every 24 hours.