Skip to main content Accessibility help
Practical Foundations for Programming Languages
  • Cited by 30
  • 2nd edition
  • Robert Harper, Carnegie Mellon University, Pennsylvania
  • Export citation
  • Recommend to librarian
  • Buy the print book

Book description

This text develops a comprehensive theory of programming languages based on type systems and structural operational semantics. Language concepts are precisely defined by their static and dynamic semantics, presenting the essential tools both intuitively and rigorously while relying on only elementary mathematics. These tools are used to analyze and prove properties of languages and provide the framework for combining and comparing language features. The broad range of concepts includes fundamental data types such as sums and products, polymorphic and abstract types, dynamic typing, dynamic dispatch, subtyping and refinement types, symbols and dynamic classification, parallelism and cost semantics, and concurrency and distribution. The methods are directly applicable to language implementation, to the development of logics for reasoning about programs, and to the formal verification language properties such as type safety. This thoroughly revised second edition includes exercises at the end of nearly every chapter and a new chapter on type refinements.


Review of previous edition:‘Harper's book provides a comprehensive treatment of the foundations of computation. He touches on a surprising range of concepts that arise in language design: from simple types to polymorphism to dependent types to modules; from strict to lazy to parallel computation; and from proof techniques for reasoning about extensional behavior to practical, compositional cost models in the presence of garbage collection. More importantly, throughout the book he uses types and the principles of type theory to organize the material and help us discover the orthogonal, composable abstractions that arise naturally not only in the design of programming languages but also in logics and mathematics. This approach helps uncover the fundamental structure lurking inside programming languages of today, and provides a principled approach to the designs for tomorrow.'

Greg Morrisett - Cornell University, New York

Review of previous edition:‘Starting with a mathematically simple framework and organizing principles that give type systems a central role, Bob Harper's magnum opus reveals the theory of programming languages as a coherent scientific subject with both breadth and elegance. His enormous experience, pithy views, and great good taste are evident throughout a book that deserves to become a classic.'

Andrew Pitts - University of Cambridge

Review of previous edition:‘This book offers an excellent introduction to a wide range of programming language concepts. They are all uniformly and carefully explained, using techniques that are very useful in practice for both analysis and implementation of programming languages. The book is authored by one of the most prominent researchers in type theory for programming languages. The presentation is very effective and based on the author's years of experience teaching the material.'

Lars Birkedal - IT University of Copenhagen

Refine List

Actions for selected content:

Select all | Deselect all
  • View selected items
  • Export citations
  • Download PDF (zip)
  • Save to Kindle
  • Save to Dropbox
  • Save to Google Drive

Save Search

You can save your searches here and later view and run them again in "My saved searches".

Please provide a title, maximum of 40 characters.


Page 1 of 3

Page 1 of 3

Martín, Abadi and Luca, Cardelli. A Theory of Objects. Springer-Verlag, 1996.
Peter, Aczel. An introduction to inductive definitions. In Jon Barwise, editor, Handbook of Mathematical Logic, chapter C.7, pages 783–818. North-Holland, 1977.
John, Allen. Anatomy of LISP. Computer Science Series. McGraw-Hill, 1978.
S. F., Allen, M., Bickford, R. L., Constable, R., Eaton, C., Kreitz, L., Lorigo, and E., Moran. Innovations in computational type theory using Nuprl. Journal of Applied Logic, 4(4):428–469, 2006. ISSN 1570-8683. doi: 10.1016/j.jal.2005.10.005.
Stuart, Allen. A non-type-theoretic definition of Martin-Löf's types. In LICS, pages 215– 221, 1987.
Zena M., Ariola and Matthias, Felleisen. The call-by-need lambda calculus. J. Funct. Program., 7(3):265–301, 1997.
Arvind, RishiyurS., Nikhil, and Keshav, Pingali. I-structures: Data structures for parallel computing. In Joseph H., Fasel and Robert M., Keller, editors, Graph Reduction, volume 279 of Lecture Notes in Computer Science, pages 336–369. Springer, 1986. ISBN 3-540-18420-1.
Arnon, Avron. Simple consequence relations. Information and Computation, 92:105–139, 1991.
Henk, Barendregt. The Lambda Calculus, Its Syntax and Semantics, volume 103 of Studies in Logic and the Foundations of Mathematics. North-Holland, 1984.
Henk, Barendregt. Lambda calculi with types. In S., Abramsky, D. M., Gabbay, and T. S. E., Maibaum, editors, Handbook of Logic in Computer Science, volume 2, Computational Structures. Oxford University Press, 1992.
Yves, Bertot, Gérard, Huet, Jean-Jacques, Lévy, and Gordon, Plotkin, editors. From Semantics to Computer Science: Essays in Honor of Gilles Kahn. Cambridge University Press, 2009.
Guy E., Blelloch. Vector Models for Data-Parallel Computing. MIT Press, 1990. ISBN 0-262-02313-X.
Guy E., Blelloch and John, Greiner. Parallelism in sequential functional languages. In FPCA, pages 226–237, 1995.
Guy E., Blelloch and John, Greiner. A provable time and space efficient implementation of NESL. In ICFP, pages 213–225, 1996.
Manuel, Blum. On the size of machines. Information and Control, 11(3):257–265, September 1967.
Stephen D., Brookes. The essence of parallel algol. Inf. Comput., 179(1):118–149, 2002.
Samuel R., Buss, editor. Handbook of Proof Theory. Elsevier, 1998.
Luca, Cardelli. Structural subtyping and the notion of power type. In Proc. ACMSymposium on Principles of Programming Languages, pages 70–79, 1988.
Luca, Cardelli. Program fragments, linking, and modularization. In Proc. ACM Symposium on Principles of Programming Languages, pages 266–277, 1997.
Giuseppe, Castagna and Benjamin C., Pierce. Decidable bounded quantification. In Proc. ACM Symposium on Principles of Programming Languages, pages 151–162, 1994.
Alonzo, Church. The Calculi of Lambda-Conversion. Princeton University Press, 1941.
Robert L., Constable. ImplementingMathematicswith theNuprl Proof Development System. Prentice-Hall, 1986.
Robert L., Constable. Types in logic, mathematics, and programming. In Buss (1998), chapter X.
Robert L., Constable and Scott F., Smith. Partial objects in constructive type theory. In LICS, pages 183–193. IEEE Computer Society, 1987.
William R., Cook. On understanding data abstraction, revisited. In OOPSLA, pages 557– 572, 2009.
Rowan, Davies. Practical Refinement-Type Checking. PhD thesis, CarnegieMellon University School of Computer Science, May 2005. Available as Technical Report CMU– CS–05–110.
Rowan, Davies and Frank, Pfenning. Intersection types and computational effects. In Martin Odersky and PhilipWadler, editors, ICFP, pages 198–208. ACM, 2000. ISBN 1-58113-202-6.
Ewen, Denney. Refinement types for specification. In David, Gries and Willem P. de, Roever, editors, PROCOMET, volume 125 of IFIP Conference Proceedings, pages 148–166. Chapman & Hall, 1998. ISBN 0-412-83760-9.
Derek, Dreyer. Understanding and Evolving the ML Module System. PhD thesis, Carnegie Mellon University, Pittsburgh, PA, May 2005.
Joshua, Dunfield and Frank, Pfenning. Type assignment for intersections and unions in callby- value languages. In Andrew D., Gordon, editor, FoSSaCS, volume 2620 of Lecture Notes in Computer Science, pages 250–266. Springer, 2003. ISBN 3-540-00897-7.
Uffe, Engberg and Mogens, Nielsen. A calculus of communicating systems with label passing—ten years after. In Gordon D., Plotkin, Colin, Stirling, and Mads, Tofte, editors, Proof, Language, and Interaction, Essays in Honour of Robin Milner, pages 599–622. The MIT Press, 2000.
Matthias, Felleisen and Robert, Hieb. The revised report on the syntactic theories of sequential control and state. TCS: Theoretical Computer Science, 103, 1992. Tim Freeman and Frank Pfenning. Refinement types for ml. In David S. Wise, editor, PLDI, pages 268–277. ACM, 1991. ISBN 0-89791-428-7.
Daniel, Friedman and David, Wise. The impact of applicative programming on multiprocessing. In International Conference on Parallel Processing, 1976.
David, Gelernter. Generative communication in Linda. ACM Trans. Program. Lang. Syst., 7(1):80–112, 1985.
Gerhard, Gentzen. Investigations into logical deduction. In M. E., Szabo, editor, The Collected Papers of Gerhard Gentzen, pages 68–213. North-Holland, 1969.
J.-Y., Girard. Interpretation fonctionelle et elimination des coupures de l'arithmetique d'ordre superieur. These d'etat, Universite Paris VII, 1972.
Jean-Yves, Girard. Proofs and Types. Cambridge University Press, 1989. Translated by Paul, Taylor and Yves, Lafont.
Kurt, Gödel. On a hitherto unexploited extension of the finitary standpoint. Journal of Philosophical Logic, 9:133–142, 1980. Translated by Wilfrid, Hodges and Bruce, Watson.
Gödel Von, Kurt. Über eine bisher noch nicht benützte erweiterung des finiten standpunktes. dialectica, 12(3-4):280–287, 1958.
Michael J., Gordon, Arthur J., Milner, and Christopher P., Wadsworth. Edinburgh LCF, volume 78 of Lecture Notes in Computer Science. Springer-Verlag, 1979.
John, Greiner and Guy E., Blelloch. A provably time-efficient parallel implementation of full speculation. ACM Trans. Program. Lang. Syst., 21(2):240–285, 1999.
Timothy, Griffin. A formulae-as-types notion of control. In Proc. ACM Symposium on Principles of Programming Languages, pages 47–58, 1990.
Carl, Gunter. Semantics of Programming Languages. Foundations of Computing Series. MIT Press, 1992.
Robert H. Halstead, Jr. Multilisp: A language for concurrent symbolic computation. ACM Trans. Program. Lang. Syst., 7(4):501–538, 1985.
Robert, Harper. Constructing type systems over an operational semantics. J. Symb. Comput., 14(1):71–84, 1992.
Robert, Harper. A simplified account of polymorphic references. Inf. Process. Lett., 51(4): 201–206, 1994.
Robert, Harper, Furio, Honsell, and Gordon, Plotkin. A framework for defining logics. Journal of the Association for Computing Machinery, 40:194–204, 1993.
Robert, Harper and Mark, Lillibridge. A type-theoretic approach to higher-order modules with sharing. In Proc. ACM Symposium on Principles of Programming Languages, pages 123–137, 1994.
Robert, Harper, John C., Mitchell, and Eugenio, Moggi. Higher-order modules and the phase distinction. In Proc. ACM Symposium on Principles of Programming Languages, pages 341–354, 1990.
Ralf, Hinze and Johan, Jeuring. Generic Haskell: Practice and theory. In Roland, Carl Backhouse and Jeremy, Gibbons, editors, Generic Programming, volume 2793 of Lecture Notes in Computer Science, pages 1–56. Springer, 2003. ISBN 3-540-20194- 7.
C. A. R., Hoare. Communicating sequential processes. Commun. ACM, 21(8):666–677, 1978.
Tony, Hoare. Null references: The billion dollarmistake. Presentation atQCon 2009, August 2009.
S. C., Kleene. Introduction to Metamathematics. Van Nostrand, 1952.
Imre, Lakatos. Proofs and Refutations: The Logic of Mathematical Discovery. Cambridge University Press, 1976.
P. J., Landin. A correspondence between Algol 60 and Church's lambda notation. CACM, 8:89–101; 158–165, 1965.
Daniel K., Lee, Karl, Crary, and Robert, Harper. Towards a mechanized metatheory of standard ml. In Proc. ACM Symposium on Principles of Programming Languages, pages 173–184, 2007.
Xavier, Leroy. Manifest types,modules, and separate compilation. In Proc. ACM Symposium on Principles of Programming Languages, pages 109–122, 1994.
Xavier, Leroy. Applicative functors and fully transparent higher-order modules. In Proc. ACM Symposium on Principles of Programming Languages, pages 142–153, 1995.
Mark, Lillibridge. Translucent Sums: A Foundation for Higher-Order Module Systems. PhD thesis, Carnegie Mellon University School of Computer Science, Pittsburgh, PA, May 1997.
Barbara, Liskov and Jeannette M., Wing. A behavioral notion of subtyping. ACM Trans. Program. Lang. Syst., 16(6):1811–1841, 1994.
Saunders, MacLane. Categories for the Working Mathematician. Graduate Texts in Mathematics. Springer-Verlag, second edition, 1998.
David B., MacQueen. Using dependent types to express modular structure. In Proc. ACM Symposium on Principles of Programming Languges, pages 277–286, 1986.
David B., MacQueen. Kahn networks at the dawn of functional programming. In Bertot et al. (2009), chapter 5.
Yitzhak, Mandelbaum, David, Walker, and Robert, Harper. An effective theory of type refinements. In Runciman and Shivers (2003), pages 213–225. ISBN 1-58113-756-7.
Per, Martin-Löf. Constructive mathematics and computer programming. In Logic, Methodology and Philosophy of Science IV, pages 153–175. North-Holland, 1980.
Per, Martin-Löf. On the meanings of the logical constants and the justifications of the logical laws. Unpublished Lecture Notes, 1983.
Per, Martin-Löf. Intuitionistic Type Theory. Studies in Proof Theory. Bibliopolis, Naples, Italy, 1984.
Per, Martin-Löf. Truth of a proposition, evidence of a judgement, validity of a proof. Synthese, 73(3):407–420, 1987.
John, McCarthy. LISP 1.5 Programmer's Manual. MIT Press, 1965.
N. P., Mendler. Recursive types and type constraints in second-order lambda calculus. In LICS, pages 30–36, 1987.
Robin, Milner. A theory of type polymorphism in programming. JCSS, 17:348–375, 1978.
Robin, Milner. Communicating and mobile systems—the Pi-calculus. Cambridge University Press, 1999. ISBN 978-0-521-65869-0.
Robin, Milner, Mads, Tofte, Robert, Harper, and David, MacQueen. The Definition of Standard ML (Revised). MIT Press, 1997.
John C., Mitchell. Coercion and type inference. In Proc. ACM Symposium on Principles of Programming Languages, pages 175–185, 1984.
John C., Mitchell. Representation independence and data abstraction. In Proc. ACM Symposium on Principles of Programming Languages, pages 263–276, 1986.
John C., Mitchell. Foundations for Programming Languages. MIT Press, 1996.
John C., Mitchell and Gordon D., Plotkin. Abstract types have existential type. ACM Trans. Program. Lang. Syst., 10(3):470–502, 1988.
Eugenio, Moggi. Computational lambda-calculus and monads. In LICS, pages 14–23. IEEE Computer Society, 1989. ISBN 0-8186-1954-6.
Tom Murphy, VII, Karl, Crary, Robert, Harper, and Frank, Pfenning. A symmetric modal lambda calculus for distributed computing. In LICS, pages 286–295, 2004.
Chetan R., Murthy. An evaluation semantics for classical proofs. In LICS, pages 96–107. IEEE Computer Society, 1991.
Aleksandar, Nanevski. From dynamic binding to state via modal possibility. In PPDP, pages 207–218. ACM, 2003. ISBN 1-58113-705-2.
R. P., Nederpelt, J. H., Geuvers, and R. C. de, Vrijer, editors. Selected Papers on Automath, volume 133 of Studies in Logic and the Foundations of Mathematics. North-Holland, 1994.
B., Nordstrom, K., Petersson, and J. M., Smith. Programming in Martin-Löf's Type Theory. Oxford University Press, 1990. URL
OCaml. Ocaml, 2012. URL
David Michael Ritchie, Park. Concurrency and automata on infinite sequences. In Peter Deussen, editor, Theoretical Computer Science, volume 104 of Lecture Notes in Computer Science, pages 167–183. Springer, 1981. ISBN 3-540-10576-X.
Frank, Pfenning and Rowan, Davies. A judgmental reconstruction of modal logic. Mathematical Structures in Computer Science, 11(4):511–540, 2001.
Benjamin C., Pierce. Types and Programming Languages. MIT Press, 2002.
Benjamin C., Pierce. Advanced Topics in Types and Programming Languages. MIT Press, 2004.
Andrew M., Pitts. Existential types: Logical relations and operational equivalence. In Kim Guldstrand, Larsen, Sven, Skyum, and Glynn, Winskel, editors, ICALP, volume 1443 of Lecture Notes in Computer Science, pages 309–326. Springer, 1998. ISBN 3-540-64781-3.
Andrew M., Pitts. Operational semantics and program equivalence. In Gilles, Barthe, Peter, Dybjer, Luis, Pinto, and João, Saraiva, editors, APPSEM, volume 2395 of Lecture Notes in Computer Science, pages 378–412. Springer, 2000. ISBN 3-540-44044-5.
Andrew M., Pitts and Ian D. B., Stark. Observable properties of higher order functions that dynamically create local names, or what's new? In Andrzej M.|Borzyszkowski and Stefan Sokolowski, editors, MFCS, volume 711 of Lecture Notes in Computer Science, pages 122–141. Springer, 1993. ISBN 3-540-57182-5.
G. D., Plotkin. A structural approach to operational semantics. Technical Report DAIMI FN-19, Aarhus University Computer Science Department, 1981.
Gordon D., Plotkin. LCF considered as a programming language. Theor. Comput. Sci., 5 (3):223–255, 1977.
Gordon D., Plotkin. The origins of structural operational semantics. J. of Logic and Algebraic Programming, 60:3–15, 2004.
John H., Reppy. Concurrent Programming in ML. Cambridge University Press, 1999.
J. C., Reynolds. Types, abstraction, and parametric polymorphism. In Information Processing '83, pages 513–523. North-Holland, 1983.
John C., Reynolds. Towards a theory of type structure. In Bernard|Robinet, editor, Symposium on Programming, volume 19 of Lecture Notes in Computer Science, pages 408–423. Springer, 1974. ISBN 3-540-06859-7.
John C., Reynolds. Using category theory to design implicit conversions and generic operators. In Neil D., Jones, editor, Semantics-Directed Compiler Generation, volume 94 of Lecture Notes in Computer Science, pages 211–258. Springer, 1980. ISBN 3-540- 10250-7.
John C., Reynolds. The essence of Algol. In Proceedings of the 1981 International Symposium on Algorithmic Languages, pages 345–372. North-Holland, 1981.
John C., Reynolds. The discoveries of continuations. Lisp and Symbolic Computation, 6 (3-4):233–248, 1993.
John C., Reynolds. Theories of Programming Languages. Cambridge University Press, 1998.
Andreas, Rossberg, Claudio V., Russo, and Derek, Dreyer. F-ing, modules. In Andrew, Kennedy and Nick, Benton, editors, TLDI, pages 89–102. ACM, 2010. ISBN 978-1- 60558-891-9.
Colin, Runciman and Olin, Shivers, editors. Proceedings of the Eighth ACM SIGPLAN International Conference on Functional Programming, ICFP 2003, Uppsala, Sweden, August 25-29, 2003, 2003. ACM. ISBN 1-58113-756-7.
Dana, Scott. Lambda calculus: Some models, some philosophy. In J., Barwise, H. J., Keisler, and K., Kunen, editors, The Kleene Symposium, pages 223–265. North Holland, 1980a.
Dana S., Scott. Data types as lattices. SIAM J. Comput., 5(3):522–587, 1976.
Dana S., Scott. Relating theories of the lambda calculus. To HB Curry: Essays on combinatory logic, lambda calculus and formalism, pages 403–450, 1980b.
Dana S., Scott. Domains for denotational semantics. In Mogens, Nielsen and Erik, Meineche Schmidt, editors, ICALP, volume 140 of Lecture Notes in Computer Science, pages 577–613. Springer, 1982. ISBN 3-540-11576-5.
Michael B., Smyth and Gordon D., Plotkin. The category-theoretic solution of recursive domain equations. SIAM J. Comput., 11(4):761–783, 1982.
Richard, Statman. Logical relations and the typed lambda-calculus. Information and Control, 65(2/3):85–97, 1985.
Guy L., Steele. Common Lisp: The Language. Digital Press, 2nd edition edition, 1990.
Christopher A., Stone and Robert, Harper. Extensional equivalence and singleton types. ACM Trans. Comput. Log., 7(4):676–722, 2006.
Paul, Taylor. Practical Foundations of Mathematics. Cambridge Studies in Advanced Mathematics. Cambridge University Press, 1999.
P. W., Trinder, K., Hammond, H.-W., Loidl, and S. L. Peyton, Jones. Algorithm + strategy = parallelism. Journal of Functional Programming, 8:23–60, 1998.
Jaap van, Oosten. Realizability: A historical essay. Mathematical Structures in Computer Science, 12(3):239–263, 2002.
Philip, Wadler. Theorems for free! In FPCA, pages 347–359, 1989.
Philip, Wadler. Comprehending monads. Mathematical Structures in Computer Science, 2 (4):461–493, 1992.
Philip, Wadler. Call-by-value is dual to call-by-name. In Runciman and Shivers (2003), pages 189–201. ISBN 1-58113-756-7.
Mitchell, Wand. Fixed-point constructions in order-enriched categories. Theor. Comput. Sci., 8:13–30, 1979.
Stephen A., Ward and Robert H., Halstead. Computation structures. MIT Electrical Engineering and Computer Science Series. MIT Press, 1990. ISBN 978-0-262-23139-8.
Kevin, Watkins, Iliano, Cervesato, Frank, Pfenning, and David, Walker. Specifying properties of concurrent computations in clf. Electr. Notes Theor. Comput. Sci., 199:67–87, 2008.
Andrew K., Wright and Matthias, Felleisen. A syntactic approach to type soundness. Inf. Comput., 115(1):38–94, 1994.
Hongwei, Xi and Frank, Pfenning. Eliminating array bound checking through dependent types. In JackW., Davidson, Keith D., Cooper, and A. Michael, Berman, editors, PLDI, pages 249–257. ACM, 1998. ISBN 0-89791-987-4.


Altmetric attention score

Full text views

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

Book summary page views

Total views: 0 *
Loading metrics...

* Views captured on Cambridge Core between #date#. This data will be updated every 24 hours.

Usage data cannot currently be displayed.