431 lines
18 KiB
Markdown
431 lines
18 KiB
Markdown
---
|
||
created_at: '2015-12-26T15:17:02.000Z'
|
||
title: 'Implementing functional languages: a tutorial (1992)'
|
||
url: http://research.microsoft.com/en-us/um/people/simonpj/papers/pj-lester-book/
|
||
author: rspivak
|
||
points: 118
|
||
story_text:
|
||
comment_text:
|
||
num_comments: 10
|
||
story_id:
|
||
story_title:
|
||
story_url:
|
||
parent_id:
|
||
created_at_i: 1451143022
|
||
_tags:
|
||
- story
|
||
- author_rspivak
|
||
- story_10794273
|
||
objectID: '10794273'
|
||
|
||
---
|
||
[Source](http://www.microsoft.com/en-us/research/publication/implementing-functional-languages-a-tutorial/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Fsimonpj%2Fpapers%2Fpj-lester-book%2F "Permalink to Implementing functional languages: a tutorial - Microsoft Research")
|
||
|
||
# Implementing functional languages: a tutorial - Microsoft Research
|
||
|
||
Try Microsoft Edge A fast and secure browser that's designed for Windows 10 No thanks Get started
|
||
|
||
This site uses cookies for analytics, personalized content and ads. By continuing to browse this site, you agree to this use. [Learn more][1]
|
||
|
||
[ ![][2] Microsoft ][3]
|
||
|
||
Research
|
||
|
||
* [Microsoft 365][4]
|
||
* [Azure][5]
|
||
* [Office 365][6]
|
||
* [Dynamics 365][7]
|
||
* [SQL][8]
|
||
* [Windows 10][9]
|
||
* More
|
||
* Products & Services
|
||
* [Windows Server][10]
|
||
* [Enterprise Mobility + Security][11]
|
||
* [Power BI][12]
|
||
* [Teams][13]
|
||
* [Visual Studio][14]
|
||
* [Surface for Business][15]
|
||
* Emerging Technologies
|
||
* [AI][16]
|
||
* [Internet of Things][17]
|
||
* [Azure Cognitive Services][18]
|
||
* [Quantum][19]
|
||
* [Research][20]
|
||
* Developer & IT
|
||
* [Docs][21]
|
||
* [TechNet][22]
|
||
* [Developer Network][23]
|
||
* [Windows Dev Center][24]
|
||
* [Windows IT Pro Center][25]
|
||
* [FastTrack][26]
|
||
* Partner
|
||
* [Partner Network][27]
|
||
* [Solution Providers][28]
|
||
* [Partner Center][29]
|
||
* [Cloud Hosting][30]
|
||
* Industries
|
||
* [Education][31]
|
||
* [Financial services][32]
|
||
* [Government][33]
|
||
* [Health][34]
|
||
* [Manufacturing & resources][35]
|
||
* [Retail][36]
|
||
* Other
|
||
* [Security][37]
|
||
* [Licensing][38]
|
||
* [AppSource][39]
|
||
* [Azure Marketplace][40]
|
||
* [Events][41]
|
||
* [View all][42]
|
||
|
||
[ Research ][43] [Research Home][43]
|
||
|
||
Research areas
|
||
|
||
* Intelligence
|
||
* [Artificial Intelligence][44]
|
||
* [Computer vision][45]
|
||
* [Graphics & multimedia][46]
|
||
* [Human-computer interaction][47]
|
||
* [Human language technologies][48]
|
||
* [Search & information retrieval][49]
|
||
* Systems
|
||
* [Data visualization, analytics & platform][50]
|
||
* [Hardware, devices & quantum computing][51]
|
||
* [Programming languages & software engineering][52]
|
||
* [Security, privacy & cryptography][53]
|
||
* [Systems & networking][54]
|
||
* Theory
|
||
* [Algorithms][55]
|
||
* [Mathematics][56]
|
||
* Other Sciences
|
||
* [Ecology & environment][57]
|
||
* [Economics][58]
|
||
* [Medical, health & genomics][59]
|
||
* [Social sciences][60]
|
||
* [Technology for emerging markets][61]
|
||
|
||
[Products & Downloads][62]
|
||
|
||
Programs & Events
|
||
|
||
* [Academic Programs][63]
|
||
* [Events & Conferences][64]
|
||
|
||
[People][65] [Careers][66]
|
||
|
||
Blogs & Podcasts
|
||
|
||
* [Microsoft Research Blog][67]
|
||
* [The Microsoft Research Podcast][68]
|
||
* [The AI Blog][69]
|
||
|
||
Labs & Locations
|
||
|
||
* Microsoft Research
|
||
* [MSR AI][70]
|
||
* [Asia Lab (Chinese)][71]
|
||
* [Asia Lab (English)][72]
|
||
* [Cambridge Lab][73]
|
||
* [India Lab][74]
|
||
* [Montreal Lab][75]
|
||
* [New England Lab][76]
|
||
* [New York City Lab][77]
|
||
* [Redmond Lab][78]
|
||
* Other labs/locations
|
||
* [Applied Sciences Lab][79]
|
||
* [Advanced Technology Lab Cairo][80]
|
||
* [Quantum][81]
|
||
* About
|
||
* [Research at Microsoft][82]
|
||
|
||
# Implementing functional languages: a tutorial
|
||
|
||
January 1, 1992
|
||
|
||
* [ Download PDF ][83]
|
||
* [ View Link ][84]
|
||
* [ BibTex ][85]
|
||
|
||
## Authors
|
||
|
||
* SL Peyton Jones
|
||
* DR Lester
|
||
* [Simon Peyton Jones][86]
|
||
|
||
## Publication Type
|
||
|
||
Book
|
||
|
||
## Book Title
|
||
|
||
Implementing functional languages: a tutorial
|
||
|
||
## Publisher
|
||
|
||
Prentice Hall
|
||
|
||
* [ Abstract ][87]
|
||
* [ Related Info ][88]
|
||
|
||
## Abstract
|
||
|
||
This book gives a practical approach to understanding implementations of non-strict functional languages using lazy graph reduction. The book is intended to be a source of practical labwork material, to help make functional-language implementations `come alive’, by helping the reader to develop, modify and experiment with some non-trivial compilers.
|
||
|
||
The unusual aspect of the book is that it is meant to be _executed_ as well as _read_. Rather than merely presenting an abstract description of each implementation technique, we present the code for a complete working prototype of each major method, and then work through a series of improvements to it. All of the code is available in machine-readable form.
|
||
|
||
## Overview of the book
|
||
|
||
The principal content of the book is a series of implementations of a small functional language called the _Core language_. The Core language is designed to be as small as possible, so that it is easy to implement, but still rich enough to allow modern non-strict functional languages to be translated into it without losing efficiency. It is described in detail in Chapter 1, in which we also develop a parser and pretty-printer for the Core language.
|
||
|
||
Appendix B contains a selection of Core-language programs for use as test programs thoughout the book.
|
||
|
||
The main body of the book consists of four distinct implementations of the Core language.
|
||
|
||
* Chapter 2 describes the most direct implementation, based on _template instantiation_.
|
||
* Chapter 3 introduces the _G-machine_, and shows how to compile the program to sequences of instructions (G-code) which can be further translated to machine code.
|
||
* Chapter 4 repeats the same exercise for a different abstract machine, the _Three Instruction Machine_ (TIM), whose evaluation model is very different from that of the G-machine. The TIM was developed more recently than the G-machine, so there is much less other literature about it. Chapter 4 therefore contains a rather more detailed development of the TIM’s evaluation model than that given for the G-machine.
|
||
* Finally, Chapter 5 adds a new dimension by showing how to compile functional programs for a _parallel G-machine_.
|
||
|
||
For each of these implementations we discuss two main parts, the _compiler_ and the _machine interpreter_. The compiler takes a Core-language program and translates it into a form suitable for execution by the machine interpreter.
|
||
|
||
The machine interpreter simulates the execution of the compiled program. In each case the interpreter is modelled as a _state transition system_ so that there is a very clear connection between the machine interpreter and a `real’ implementation.
|
||
|
||
One important way in which the Core language is restrictive is in its lack of local function definitions. There is a well-known transformation, called _lambda lifting_, which turns local function definitions into global ones, thus enabling local function definitions to be written freely and transformed out later. In Chapter 6 we develop a suitable lambda lifter. This chapter is more than just a re-presentation of standard material. _Full laziness_ is a property of functional programs which had previously been seen as inseparable from lambda lifting. In Chapter 6 we show that they are in fact quite distinct, and show how to implement full laziness in a separate pass from lambda lifting.
|
||
|
||
## Typographical errors
|
||
|
||
Here are some typographical errors, spotted by various readers. Page numbers refer to the online versions (which differ from the printed version).
|
||
|
||
* Page 128, second to last paragraph of section 3.7, first sentence. “addis” should be “is a”.
|
||
* Page 134, the code for i’. The “n” under the big brace symbol should say “n pairs”.
|
||
* Page 135. Equation 3.36 should have “NConstr”, not “Constr”.
|
||
* Page 230, second paragraph. “There one final gloss…” should be “There is one final gloss…”.
|
||
* Page 278, the definition of nfib. Replace “n==0” by “n<=1”.
|
||
|
||
Now, alas, out of print. However the full text of the book is available above. You can order a nicely-bound copy from <http://www.cafepress.com/haskell_books>. Thanks to John Meacham for setting this up.
|
||
|
||
There is also a [tutor’s guide ][89]available.
|
||
|
||
|
||
|
||
## Related Info
|
||
|
||
## Research Areas
|
||
|
||
* [ Programming languages and software engineering ][90]
|
||
|
||
## Follow Microsoft Research
|
||
|
||
* * [Follow @MSFTResearch][91]
|
||
* ## Share this page
|
||
* * [Tweet][92]
|
||
* #### What's new
|
||
* [Surface Book 2][93]
|
||
* [Surface Pro][94]
|
||
* [Xbox One X][95]
|
||
* [Xbox One S][96]
|
||
* [VR & mixed reality][97]
|
||
* [Windows 10 apps][98]
|
||
* [Office apps][99]
|
||
|
||
#### Store & Support
|
||
|
||
* [Account profile][100]
|
||
* [Download Center][101]
|
||
* [Sales & support][102]
|
||
* [Returns][103]
|
||
* [Order tracking][104]
|
||
* [Store locations][105]
|
||
* [Support][106]
|
||
* [Buy online, pick up in store][107]
|
||
|
||
#### Education
|
||
|
||
* [Microsoft in education][31]
|
||
* [Office for students][108]
|
||
* [Office 365 for schools][109]
|
||
* [Deals for students & educators ][110]
|
||
* [Microsoft Azure in education][111]
|
||
|
||
#### Enterprise
|
||
|
||
* [Microsoft Azure ][112]
|
||
* [Enterprise][113]
|
||
* [Data platform][114]
|
||
* [Find a solutions provider][115]
|
||
* [Microsoft partner resources ][116]
|
||
* [Microsoft AppSource ][117]
|
||
* [Manufacturing & resources][35]
|
||
* [Financial services][32]
|
||
|
||
#### Developer
|
||
|
||
* [Microsoft Visual Studio][14]
|
||
* [Windows Dev Center][24]
|
||
* [Developer Network][23]
|
||
* [TechNet][118]
|
||
* [Microsoft Virtual Academy][119]
|
||
* [Microsoft developer program][120]
|
||
* [Channel 9][121]
|
||
* [Office Dev Center][122]
|
||
|
||
#### Company
|
||
|
||
* [Careers][123]
|
||
* [About Microsoft][124]
|
||
* [Company news][125]
|
||
* [Privacy at Microsoft][126]
|
||
* [Investors][127]
|
||
* [Diversity and inclusion][128]
|
||
* [Accessibility][129]
|
||
* [Security][130]
|
||
* [Sitemap][131]
|
||
* [Contact us][132]
|
||
* [Privacy & cookies ][133]
|
||
* [Terms of use][134]
|
||
* [Trademarks][135]
|
||
* [About our ads][136]
|
||
* © Microsoft 2018
|
||
|
||
![][137]
|
||
|
||
[1]: https://go.microsoft.com/fwlink/?linkid=845480
|
||
[2]: https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE1Mu3b?ver=5c31
|
||
[3]: https://www.microsoft.com
|
||
[4]: https://www.microsoft.com/en-us/microsoft-365
|
||
[5]: https://azure.microsoft.com
|
||
[6]: https://products.office.com/en-us/business/office
|
||
[7]: https://dynamics.microsoft.com/en-us/
|
||
[8]: https://www.microsoft.com/sql-server/
|
||
[9]: https://www.microsoft.com/en-us/windowsforbusiness
|
||
[10]: https://www.microsoft.com/cloud-platform/windows-server
|
||
[11]: https://www.microsoft.com/cloud-platform/enterprise-mobility-security
|
||
[12]: https://powerbi.microsoft.com/en-us/
|
||
[13]: https://products.office.com/en-us/microsoft-teams/group-chat-software
|
||
[14]: https://www.visualstudio.com/
|
||
[15]: https://www.microsoft.com/en-us/surface/business/overview
|
||
[16]: https://www.microsoft.com/ai/
|
||
[17]: https://www.microsoft.com/internet-of-things
|
||
[18]: https://azure.microsoft.com/services/cognitive-services/
|
||
[19]: https://www.microsoft.com/quantum/
|
||
[20]: https://www.microsoft.com/research/
|
||
[21]: https://docs.microsoft.com/en-us/
|
||
[22]: https://technet.microsoft.com/en-us/ms376608.aspx
|
||
[23]: https://msdn.microsoft.com/en-us
|
||
[24]: https://developer.microsoft.com/en-us/windows
|
||
[25]: https://www.microsoft.com/en-us/itpro/windows
|
||
[26]: https://fasttrack.microsoft.com/office
|
||
[27]: https://partner.microsoft.com/
|
||
[28]: https://www.microsoft.com/solution-providers/
|
||
[29]: https://partnercenter.microsoft.com/partner/home
|
||
[30]: https://www.microsoft.com/en-us/cloudandhosting
|
||
[31]: https://www.microsoft.com/en-us/education
|
||
[32]: https://enterprise.microsoft.com/en-us
|
||
[33]: https://enterprise.microsoft.com/en-us/industries/government/
|
||
[34]: https://enterprise.microsoft.com/en-us/industries/health/
|
||
[35]: https://enterprise.microsoft.com/en-us/industries/discrete-manufacturing/
|
||
[36]: https://enterprise.microsoft.com/en-us/industries/retail-and-consumer-goods/
|
||
[37]: https://www.microsoft.com/security/
|
||
[38]: https://www.microsoft.com/licensing/
|
||
[39]: https://appsource.microsoft.com/
|
||
[40]: https://azuremarketplace.microsoft.com/marketplace/
|
||
[41]: https://events.microsoft.com/
|
||
[42]: https://www.microsoft.com/en-us/sitemap.aspx
|
||
[43]: http://www.microsoft.com/en-us/research/
|
||
[44]: http://www.microsoft.com/en-us/research/research-area/artificial-intelligence/
|
||
[45]: http://www.microsoft.com/en-us/research/research-area/computer-vision/
|
||
[46]: http://www.microsoft.com/en-us/research/research-area/graphics-and-multimedia/
|
||
[47]: http://www.microsoft.com/en-us/research/research-area/human-computer-interaction/
|
||
[48]: http://www.microsoft.com/en-us/research/research-area/human-language-technologies/
|
||
[49]: http://www.microsoft.com/en-us/research/research-area/search-information-retrieval/
|
||
[50]: http://www.microsoft.com/en-us/research/research-area/data-visualization-analytics-platform/
|
||
[51]: http://www.microsoft.com/en-us/research/research-area/hardware-devices-quantum-computing/
|
||
[52]: http://www.microsoft.com/en-us/research/research-area/programming-languages-software-engineering/
|
||
[53]: http://www.microsoft.com/en-us/research/research-area/security-privacy-cryptography/
|
||
[54]: http://www.microsoft.com/en-us/research/research-area/systems-and-networking/
|
||
[55]: http://www.microsoft.com/en-us/research/research-area/algorithms/
|
||
[56]: http://www.microsoft.com/en-us/research/research-area/computational-sciences-mathematics/
|
||
[57]: http://www.microsoft.com/en-us/research/research-area/ecology-environment/
|
||
[58]: http://www.microsoft.com/en-us/research/research-area/economics/
|
||
[59]: http://www.microsoft.com/en-us/research/research-area/medical-health-genomics/
|
||
[60]: http://www.microsoft.com/en-us/research/research-area/social-sciences/
|
||
[61]: http://www.microsoft.com/en-us/research/research-area/technology-for-emerging-markets/
|
||
[62]: http://www.microsoft.com/en-us/research/products/
|
||
[63]: http://www.microsoft.com/en-us/research/academic-programs/
|
||
[64]: http://www.microsoft.com/en-us/research/events-conferences/
|
||
[65]: http://www.microsoft.com/en-us/research/people/
|
||
[66]: http://www.microsoft.com/en-us/research/careers/
|
||
[67]: http://www.microsoft.com/en-us/research/blog
|
||
[68]: http://www.microsoft.com/en-us/research/blog/category/podcast/
|
||
[69]: https://blogs.microsoft.com/next/
|
||
[70]: http://www.microsoft.com/en-us/research/lab/microsoft-research-ai/
|
||
[71]: http://www.msra.cn
|
||
[72]: http://www.microsoft.com/en-us/research/lab/microsoft-research-asia/
|
||
[73]: http://www.microsoft.com/en-us/research/lab/microsoft-research-cambridge/
|
||
[74]: http://www.microsoft.com/en-us/research/lab/microsoft-research-india/
|
||
[75]: http://www.microsoft.com/en-us/research/lab/microsoft-research-montreal/
|
||
[76]: http://www.microsoft.com/en-us/research/lab/microsoft-research-new-england/
|
||
[77]: http://www.microsoft.com/en-us/research/lab/microsoft-research-new-york/
|
||
[78]: http://www.microsoft.com/en-us/research/lab/microsoft-research-redmond/
|
||
[79]: http://www.microsoft.com/en-us/research/lab/applied-sciences-group/
|
||
[80]: http://www.microsoft.com/en-us/research/group/advanced-technology-lab-cairo-2/
|
||
[81]: http://www.microsoft.com/en-us/research/lab/quantum/
|
||
[82]: http://www.microsoft.com/en-us/research/about/
|
||
[83]: https://www.microsoft.com/en-us/research/wp-content/uploads/1992/01/student.pdf
|
||
[84]: http://www.cafepress.com/haskell_books
|
||
[85]: https://www.microsoft.com/en-us/research/publication/implementing-functional-languages-a-tutorial/bibtex/
|
||
[86]: https://www.microsoft.com/en-us/research/people/simonpj/
|
||
[87]: http://www.microsoft.com#%21abstract
|
||
[88]: http://www.microsoft.com#%21related_info
|
||
[89]: https://www.microsoft.com/en-us/research/wp-content/uploads/1992/01/tutor.pdf
|
||
[90]: https://www.microsoft.com/en-us/research/research-area/programming-languages-software-engineering/
|
||
[91]: https://twitter.com/MSFTResearch
|
||
[92]: https://twitter.com/share
|
||
[93]: https://www.microsoft.com/en-us/surface/devices/surface-book-2/overview
|
||
[94]: https://www.microsoft.com/en-us/surface/devices/surface-pro/overview
|
||
[95]: https://www.xbox.com/en-us/xbox-one-x
|
||
[96]: https://www.xbox.com/en-us/xbox-one-s?xr=shellnav
|
||
[97]: https://www.microsoft.com/en-us/store/b/virtualreality
|
||
[98]: https://www.microsoft.com/en-us/windows/windows-10-apps
|
||
[99]: https://store.office.com/en-us/appshome.aspx?
|
||
[100]: https://account.microsoft.com/
|
||
[101]: https://www.microsoft.com/en-us/download
|
||
[102]: https://go.microsoft.com/fwlink/p/?LinkID=824761&clcid=0x409
|
||
[103]: https://go.microsoft.com/fwlink/p/?LinkID=824764&clcid=0x409
|
||
[104]: https://account.microsoft.com/orders
|
||
[105]: https://www.microsoft.com/en-us/store/locations/find-a-store
|
||
[106]: https://support.microsoft.com/en-us
|
||
[107]: https://www.microsoft.com/en-us/store/b/buy-online-pick-up-in-store?icid=uhf_footer_bopuis
|
||
[108]: https://www.microsoft.com/en-us/education/products/office/default.aspx
|
||
[109]: https://products.office.com/en-us/academic/compare-office-365-education-plans
|
||
[110]: https://www.microsoft.com/en-us/store/b/student
|
||
[111]: https://azure.microsoft.com/en-us/community/education/
|
||
[112]: https://azure.microsoft.com/
|
||
[113]: https://enterprise.microsoft.com/en-us/
|
||
[114]: https://www.microsoft.com/en-us/sql-server/
|
||
[115]: https://www.microsoft.com/en-us/solution-providers
|
||
[116]: https://partner.microsoft.com/en-us/
|
||
[117]: https://go.microsoft.com/fwlink/?LinkID=808093
|
||
[118]: https://technet.microsoft.com/en-us
|
||
[119]: https://mva.microsoft.com/
|
||
[120]: https://developer.microsoft.com/en-us/store/register
|
||
[121]: https://channel9.msdn.com/
|
||
[122]: https://developer.microsoft.com/office
|
||
[123]: https://careers.microsoft.com/
|
||
[124]: https://www.microsoft.com/en-us/about
|
||
[125]: https://news.microsoft.com/
|
||
[126]: https://privacy.microsoft.com/en-us
|
||
[127]: https://www.microsoft.com/investor/default.aspx
|
||
[128]: https://www.microsoft.com/en-us/diversity/
|
||
[129]: https://www.microsoft.com/en-us/accessibility/home
|
||
[130]: https://www.microsoft.com/en-us/security/default.aspx
|
||
[131]: https://www.microsoft.com/en-us/sitemap1.aspx
|
||
[132]: https://support.microsoft.com/en-us/contactus
|
||
[133]: https://go.microsoft.com/fwlink/?LinkId=521839
|
||
[134]: https://go.microsoft.com/fwlink/?LinkID=206977
|
||
[135]: https://www.microsoft.com/trademarks
|
||
[136]: https://choice.microsoft.com
|
||
[137]: https://www.facebook.com/tr?id=435868603227390&ev=PageView&noscript=1
|
||
|