The Spineless Tagless G-Machine Version

The Spineless Tagless G-Machine Version

Implementing lazy functional languages on sto ck hardware the Spineless Tagless Gmachine Version Simon L Peyton Jones Department of Computing Science University of Glasgow G QQ simonp jdcsglasgowacuk July Abstract The Spineless Tagless Gmachine is an abstract machine designed to supp ort non strict higherorder functional languages This presentation of the machine falls into three parts Firstly we give a general discussion of the design issues involved in implementing nonstrict functional languages Next we present the STG language an austere but recognisablyfunctional language which as well as a denotational meaning has a welldened operational semantics The STG language is the abstract machine co de for the Spineless Tagless Gmachine Lastly we discuss the mapping of the STG language onto sto ck hardware The success of an abstract machine mo del dep ends largely on how ecient this mapping can b e 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 p ortable assembler This pap er is to app ear in the Journal of Functional Programming Changes in Version large new section on comparing the STG machine with other designs Section proling material Section index Changes in Version prop er statement of the initial state of the machine Sec tion reformulation of CAF up dates Section new format for state transition rules separating the guards which govern the applicability of the rules such that from the auxiliary denitions where Section Changes in Version introduction of the term lambdaform new subsection on lambda lifting Section discussion of copyvsshare in Section allow a variable binding form of default alternative in algebraic case expressions Changes in Version more explicit discussion of the translation into the STG language Section some reordering of subsections in Section an overview of the co de generation pro cess at the start of Section Changes in Version newformat proling in Section new section on black holes saying how to avoid space leaks without blackholing Section Changes in Version app endix added giving gory details Apart from the app endix this is essentially the version published in the Journal of Functional Programming Very minor changes to main pap er xed bug in Fig and other typos Previously entitled The Spineless Tagless Gmachine a second attempt Contents Introduction Overview Part I the design space : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Part I I the abstract machine : : : : : : : : : : : : : : : : : : : : : : : : : : : Part I I I mapping the abstract machine onto real hardware : : : : : : : : : : Source language and compilation route : : : : : : : : : : : : : : : : : : : : : : Exploring the design space The representation of closures : : : : : : : : : : : : : : : : : : : : : : : : : : : Function application and the evaluation stack : : : : : : : : : : : : : : : : : : Data structures : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Summary : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : The STG language Translating into the STG language : : : : : : : : : : : : : : : : : : : : : : : : Closures and up dates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Generating fewer up datable lambdaforms : : : : : : : : : : : : : : : : : : : : Standard constructors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Lambda lifting : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Full laziness : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Arithmetic and unboxed values : : : : : : : : : : : : : : : : : : : : : : : : : : Relationship to CPS conversion : : : : : : : : : : : : : : : : : : : : : : : : : : Op erational semantics of the STG language The initial state : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Applications : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : letrec expressions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Case expressions and data constructors : : : : : : : : : : : : : : : : : : : : : : Built in op erations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Up dating : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Target language Mapping the STG machine to C : : : : : : : : : : : : : : : : : : : : : : : : : Compiling jumps : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Optimising the tiny interpreter : : : : : : : : : : : : : : : : : : : : : : : : : : Debugging : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : The heap How closures are represented : : : : : : : : : : : : : : : : : : : : : : : : : : : Allo cation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Twospace garbage collection : : : : : : : : : : : : : : : : : : : : : : : : : : : Other garbage collector variants : : : : : : : : : : : : : : : : : : : : : : : : : : Trading co de size for sp eed : : : : : : : : : : : : : : : : : : : : : : : : : : : : The standardentry co de for a closure : : : : : : : : : : : : : : : : : : : : : : Stacks One stack : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Two stacks : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Compiling the STG language to C The initial state : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Applications : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : letrec expressions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : case expressions : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Arithmetic : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Adding up dates Representing up date frames : : : : : : : : : : : : : : : : : : : : : : : : : : : : Partial applications : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Constructors : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Vectored returns : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Returning values in registers : : : : : : : : : : : : : : : : : : : : : : : : : : : : Up date in place : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Up date frames and garbage collection : : : : : : : : : : : : : : : : : : : : : : Global up datable closures : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Status and proling results A The gory details A Up date ags : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A Black holes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A Adding llers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A Performing up dates : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A Lambdaform info : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : B Stack stubbing B Implementation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Introduction The challenges of compiling nonstrict functional languages have given rise to a whole stream of research work Generally the discussion of this work has b een fo cussed around the design of a socalled abstract machine which distils the key asp ects of the compilation technique without b ecoming swamped in the details of source language or co de generation Quite a few such abstractmachine designs have b een presented in recent years examples include the G machine Augustsson Johnsson TIM Fairbairn Wray the Spineless Gmachine Burn Peyton Jones Robson the Oregon Gmachine chip Kieburtz the CASE machine Davie McNally the HDG machine Kingdon Lester Burn the h; G i machine Augustsson Johnsson and the ABC machine Ko opman Early implementations esp ecially those based on graph reduction were radically dierent from conventional compiler technology the dierence b etween an SK combinator implemen tation Turner and say a Lisp compiler is substantial So great was this divergence that new hardware architectures were developed sp ecically to supp ort the execution mo del Scheevel Stoye Clarke Norman As understanding has developed though it has b een p ossible to recognise features of more conventional systems emerging from the mist and to generate ecient co de for sto ck architectures In this pap er we present a new abstract machine for nonstrict functional languages the Spineless Tagless Gmachine set it in the context of conventional compiler technology and give a detailed discussion of its mapping onto sto ck hardware Our design exhibits a number of unusual features In all other the abstract machines mentioned ab ove the abstract machine co de for a program consists of a sequence of abstract machine instructions Each instruction is given a precise op erational semantics using a state transition system We take a dierent approach the abstract machine language is itself a very small func tional language which has the usual denotational semantics In addition though each language construct has a direct op erational interpretation and we give an op erational semantics for the same language using a state transition system Ob jects in the heap b oth unevaluated susp ensions and head normal

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    87 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us