Skip to main content

Type systems

  • Chapter
Programming Methodology

Part of the book series: Monographs in Computer Science ((MCS))

  • 261 Accesses

Abstract

The study of type systems has emerged as one of the most active areas of research in programming languages, with applications in software engineering, language design, high-performance compiler implementation, and security. This chapter discusses the motivations and history of type systems and their role in programming language design.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

eBook
USD 16.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 149.00
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info
Hardcover Book
USD 109.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

Similar content being viewed by others

References

  1. Martin Abadi. Secrecy by typing in security protocols. Journal of the ACM,46(5):749–786, September 1999. Summary in the Proceedings of TACS ‘87,LNCS 1281, Springer.

    Google Scholar 

  2. Martin Abadi, Anindya Banerjee, Nevin Heintze, and Jon G. Riecke. A core calculus of dependency. In ACM, editor, POPL ‘89. Proceedings of the 26th ACM SIGPLAN-SIGACT on Principles of programming languages, January 20–22, 1999, San Antonio, TX, ACM SIGPLAN Notices, pages 147–160, New York, NY, USA, 1999. ACM Press.

    Google Scholar 

  3. Martin Abadi and Luca Cardelli. A Theory of Objects. Springer-Verlag, 1996.

    Google Scholar 

  4. Ken Arnold, Ann Wollrath, Bryan O’Sullivan, Robert Scheifler, and Jim Waldo. The Jini specification. Addison-Wesley, 1999.

    Google Scholar 

  5. John Backus. The history of Fortran I, II, and III. In R. L. Wexelblat, editor, History of Programming Languages, pages 25–45. Academic Press, 1981.

    Google Scholar 

  6. Henk Barendregt. Introduction to generalized type systems. Journal of Functional Programming, 1992.

    Google Scholar 

  7. Bruno Barras, Samuel Boutin, Cristina Cornes, Judicael Courant, Jean-Christophe Filliatre, Eduardo Gimenez, Hugo Herbelin, Gerard Huet, Cesar Munoz, Chetan Murthy, Catherine Parent, Christine Paulin-Mohring, Amokrane Saibi, and Benjamin Werner. The coq proof assistant reference manual: Version 6.1. Technical Report RT-0203, Inria ( Institut National de Recherche en Informatique et en Automatique ), France, 1997.

    Google Scholar 

  8. Graham M. Birtwistle, Ole-Johan Dahl, Bjorn Myhrhaug, and Kristen Nygaard. Simula Begin. Studentlitteratur (Lund, Sweden), Bratt Institut fuer neues Lernen (Goch, FRG), Chartwell-Bratt Ltd, 1979.

    Google Scholar 

  9. Luca Cardelli. A semantics of multiple inheritance. In G. Kahn, D. MacQueen, and G. Plotkin, editors, Semantics of Data Types, volume 173 of Lecture Notes in Computer Science, pages 51–67. Springer-Verlag, 1984. Full version in Information and Computation 76(2/3):138–164, 1988.

    Google Scholar 

  10. Luca Cardelli. Notes about F’.. Unpublished manuscript, October 1990.

    Google Scholar 

  11. Luca Cardelli. Typeful programming. In E. J. Neuhold and M. Paul, editors, Formal Description of Programming Concepts. Springer-Verlag, 1991. An earlier version appeared as DEC Systems Research Center Research Report #45, February 1989.

    Google Scholar 

  12. Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, and Greg Nelson. Modula-3 report (revised). Research report 52, DEC Systems Research Center, November 1989.

    Google Scholar 

  13. Luca Cardelli and Giuseppe Longo. A semantic basis for Quest. Journal of Functional Programming, 1(4):417–458, October 1991. Preliminary version in ACM Conference on Lisp and Functional Programming, June 1990. Also available as DEC SRC Research Report 55, Feb. 1990.

    Google Scholar 

  14. Luca Cardelli, Simone Martini, John C. Mitchell, and Andre Scedrov. An extension of system F with subtyping. Information and Computation, 109(1–2):4–56, 1994. Preliminary version in TACS ‘81, Sendai, Japan, pp. 750–770.

    Google Scholar 

  15. Luca Cardelli and John Mitchell. Operations on records. Mathematical Structures in Computer Science,1:3–48, 1991. Also in Carl A. Gunter and John C. Mitchell, editors, Theoretical Aspects of Object-Oriented Programming: Types, Semantics, and Language Design (MIT Press, 1994); available as DEC Systems Research Center Research Report #48, August, 1989, and in the proceedings of MFPS ‘89, LNCS 442, Springer.

    Google Scholar 

  16. Luca Cardelli and Peter Wegner. On understanding types, data abstraction, and polymorphism. Computing Surveys, 17 (4): 471–522, December 1985.

    Article  Google Scholar 

  17. Alonzo Church. A formulation of the simple theory of types. Journal of Symbolic Logic, 5: 56–68, 1940.

    Article  MathSciNet  MATH  Google Scholar 

  18. Alonzo Church. The Calculi of Lambda Conversion. Princeton University Press, 1941.

    Google Scholar 

  19. Robert L. Constable et al. Implementing Mathematics with the NuPRL Proof Development System. Prentice—Hall, 1986.

    Google Scholar 

  20. M. Coppo and M. Dezani-Ciancaglini. A new type-assignment for A-terms. Archiv Math. Logik, 19: 139–156, 1978.

    Article  MathSciNet  MATH  Google Scholar 

  21. M. Coppo, M. Dezani-Ciancaglini, and P. Salle. Functional characterization of some semantic equalities inside A-calculus. In Hermann A. Maurer, editor, Proceedings of the 6th Colloquium on Automata, Languages and Programming, LNCS 71, 133–146, Graz, Austria, July 1979. Springer.

    Chapter  Google Scholar 

  22. Thierry Coquand. Une Théorie des Constructions. PhD thesis, University Paris VII, January 1985.

    Google Scholar 

  23. Thierry Coquand and Gérard Huet. The Calculus of Constructions. Information and Computation, 76 (2/3): 95–120, February/March 1988.

    MathSciNet  MATH  Google Scholar 

  24. Pierre-Louis Curien and Giorgio Ghelli. Coherence of subsumption: Minimum typing and type-checking in F. Mathematical Structures in Computer Science, 2:55–91, 1992. Also in Carl A. Gunter and John C. Mitchell, editors, Theoretical Aspects of Object-Oriented Programming: Types, Semantics, and Language Design (MIT Press, 1994 ).

    Google Scholar 

  25. H. B. Curry and R. Feys. Combinatory Logic, volume 1. North Holland, 1958. (Second edition, 1968 ).

    Google Scholar 

  26. Luis Damas and Robin Milner. Principal type schemes for functional programs. In Proceedings of the 9th ACM Symposium on Principles of Programming Languages, pages 207–212, 1982.

    Google Scholar 

  27. Nicolas G. de Bruijn. A survey of the project AUTOMATH. In J. P. Seldin and J. R. Hindley, editors, To H. B. Curry: Essays in Combinatory Logic, Lambda Calculus, and Formalism, pages 589–606. Academic Press, 1980.

    Google Scholar 

  28. David L. Detlefs, K. Rustan M. Leino, Greg Nelson, and James B. Saxe. Extended static checking. Technical Report 159, Compaq Systems Research Center (SRC), 1998. Alsoseehttp://research.compaq.com/SRC/esc/overview.html.

    Google Scholar 

  29. R. Kent Dybvig. The Scheme Programming Language. Prentice-Hall, 1987.

    Google Scholar 

  30. Peter Eidorff, Fritz Henglein, Christian Mossin, Henning Niss, Morten Heine B. Sorensen, and Mads Tofte. Annodomini in practice: A type-theoretic approach to the year 2000 problem. In Jean-Yves Girard, editor, Proc. Symposium on Typed Lambda Calculus and Applications (TLCA), volume 1581 of Lecture Notes in Computer Science, pages 6–13, L’Aquila, Italy, April 1999. Springer-Verlag.

    Google Scholar 

  31. Gottlob Frege. Begriffschrift, eine der arithmetischen nachgebildete Formelsprache des reinen Denkens. Halle: L. Nebert, 1879.

    Google Scholar 

  32. R. O. Gandy. The simple theory of types. In Logic Colloquium 76, volume 87 of Studies in Logic and the Foundations of Mathematics, pages 173–181. North Holland, 1976.

    Google Scholar 

  33. D. Gifford, P. Jouvelot, J. Lucassen, and M. Sheldon. FX-87 REFERENCE MANUAL. Technical Report MIT-LCS//MIT/LCS/TR-407, Massachusetts Institute of Technology, Laboratory for Computer Science, September 1987.

    Google Scholar 

  34. Jean-Yves Girard. Interprétation fonctionelle et élimination des coupures de l’arithmétique d’ordre supérieur. PhD thesis, Université Paris VII, 1972. A summary appeared in the Proceedings of the Second Scandinavian Logic Symposium (J.E. Fenstad, editor), North-Holland, 1971 (pp. 63–92 ).

    Google Scholar 

  35. Jean-Yves Girard. Linear logic. Theoretical Computer Science, 50: 1–102, 1987.

    Article  MATH  Google Scholar 

  36. Jean-Yves Girard, Yves Lafont, and Paul Taylor. Proofs and Types, volume 7 of Cambridge Tracts in Theoretical Computer Science. Cambridge University Press, 1989.

    Google Scholar 

  37. Michael J. Gordon, Robin Milner, and Christopher P. Wadsworth. Edinburgh LCF. LNCS 78, Springer-Verlag, 1979.

    Google Scholar 

  38. Robert Harper, Furio Honsell, and Gordon Plotkin. A framework for defining logics. Journal of the ACM, 40(1):143–184,1992. Preliminary version in LICS’87.

    Google Scholar 

  39. Robert Harper and Mark Lillibridge. A type-theoretic approach to higher-order modules with sharing. In Proceedings of the Twenty-First ACM Symposium on Principles of Programming Languages (POPL), Portland, Oregon, pages 123–137, Portland, Oregon, January 1994.

    Google Scholar 

  40. Fritz Henglein and Harry G. Mairson. The complexity of type inference for higher-order typed lambda-calculi. In Proceedings of the Eighteenth ACM Symposium on Principles of Programming Languages, pages 119–130, Orlando, FL, January 1991.

    Google Scholar 

  41. J. Roger Hindley. Basic Simple Type Theory, volume 42 of Cambridge Tracts in Theoretical Computer Science. Cambridge University Press, 1997.

    Google Scholar 

  42. W. A. Howard. The formulas-as-types notion of construction. In J. P. Seldin and J. R. Hindley, editors, To H. B. Curry: Essays on Combinatory Logic, Lambda Calculus, and Formalism, pages 479–490. Academic Press, 1980. Reprint of 1969 article.

    Google Scholar 

  43. Richard Kelsey, William Clinger, and Jonathan Rees. Revised report on the algorithmic language Scheme. ACM SIGPLAN Notices,33(9):26–76, September 1998. With H. Abelson, N. I. Adams, IV, D. H. Bartley, G. Brooks, R. K. Dybvig, D. P. Friedman, R. Halstead, C. Hanson, C. T. Haynes, E. Kohlbecker, D. Oxley, K. M. Pitman, G. J. Rozas, G. L. Steele, Jr., G. J. Sussman, and M. Wand.

    Google Scholar 

  44. Andrew Kennedy. Dimension types. In Donald Sannella, editor, Programming Languages and Systems—ESOP’94, 5th European Symposium on Programming, volume 788 of Lecture Notes in Computer Science, pages 348–362, Edinburgh, U.K., 11–13 April 1994. Springer.

    Google Scholar 

  45. Xavier Leroy. Manifest types, modules and separate compilation. In Conference record of POPL ‘84: 21st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pages 109–122, Portland, Oregon, January 1994.

    Chapter  Google Scholar 

  46. Xavier Leroy. The objective caml system: Documentation and user’s manual, 2000. With Damien Doligez, Jacques Garrigue, Didier Rémy, and Jfôme Vouillon. Available from ht tp:// caml. inr i a. f r.

    Google Scholar 

  47. Xavier Leroy and François Rouaix. Security properties of typed applets. In Conference Record of POPL 98: The 25TH ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, San Diego, California, pages 391–403, ACM, 1998.

    Chapter  Google Scholar 

  48. B. Liskov, R. Atkinson, T. Bloom, E. Moss, J.C. Schaffert, R. Scheifler, and A. Snyder. CLU Reference Manual. Springer-Verlag, 1981.

    Google Scholar 

  49. Zhaohui Luo and Robert Pollack. The LEGO proof development system: A user’s manual. Technical Report ECS-LFCS-92–211, University of Edinburgh, May 1992.

    Google Scholar 

  50. David MacQueen. Using dependent types to express modular structure. In 13th Annual ACM Symposium on Principles of Programming languages, pages 277–286, St. Petersburg Beach, Florida, January 1986.

    Google Scholar 

  51. Lena Magnusson and Bengt Nordström. The ALF proof editor and its proof engine. In Henk Barendregt and Tobias Nipkow, editors, Types for Proofs and Programs, pages 213–237. LNCS 806, Springer-Verlag, 1994.

    Google Scholar 

  52. Per Martin-Löf. An intuitionistic theory of types: predicative part. In H. E. Rose and J. C. Shepherdson, editors, Logic Colloquium, ’73, pages 73–118, Amsterdam, 1973. North Holland.

    Google Scholar 

  53. Per Martin-Löf. Constructive mathematics and computer programming. In Logic, Methodology and Philosophy of Science, VI. North Holland, Amsterdam, 1982.

    Google Scholar 

  54. Robin Milner. A theory of type polymorphism in programming. Journal of Computer and System Sciences, 17: 348–375, August 1978.

    Article  MathSciNet  MATH  Google Scholar 

  55. John C. Mitchell. Coercion and type inference (summary). In Proc. 11th ACM Symp. on Principles of Programming Languages, pages 175–185, January 1984.

    Google Scholar 

  56. John C. Mitchell and Gordon D. Plotkin. Abstract types have existential types. ACM Trans. on Programming Languages and Systems, 10(3):470–502, 1988. Preliminary version appeared in Proc. 12th ACM Symp. on Principles of Programming Languages, 1985.

    Google Scholar 

  57. Greg Morrisett, David Walker, Karl Crary, and Neal Glew. From System F to Typed Assembly Language. In Twenty-fifth ACM Symposium on Principles of Programming Languages, pages 85–97, San Diego, January 1998.

    Google Scholar 

  58. Gopalan Nadathur and Dale Miller. An overview of)Prolog. In Robert A. Kowalski and Kenneth A. Bowen, editors, Logic Programming: Proceedings of the Fifth International Conference and Symposium, Volume 1, pages 810–827, Cambridge, Massachusetts, August 1988. MIT Press.

    Google Scholar 

  59. R. Naur et al. Revised report on the algorithmic language Algol 60. Communications of the ACM, 6: 1–17, January 1963.

    Article  Google Scholar 

  60. G. C. Necula and P. Lee. Safe, untrusted agents using proof-carrying code. In G. Vigna, editor, Mobile Agents and Security, LNCS 1419 pages 61–91. Springer-Verlag, 1998.

    Google Scholar 

  61. George C. Necula. Proof-carrying code. In Conference Record of POPL ‘87: The 24th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages pages 106–119, Paris, France, 15–17 January 1997.

    Google Scholar 

  62. George C. Necula and Peter Lee. Safe kernel extensions without run-time checking. In 2nd Symposium on Operating Systems Design and Implementation (OSDI ’96),October 28–31, 1996, Seattle, WA, pages 229–243, Berkeley, California, USA, October 1996. USENIX Press.

    Google Scholar 

  63. Greg Nelson, editor. Systems Programming with Modula-3. Prentice Hall, 1991.

    Google Scholar 

  64. Frank Pfenning. Elf: A meta-language for deductive systems. In A. Bundy, editor, Proceedings of the 12th International Conference on Automated Deduction, pages 811–815, Nancy, France, June 1994. LNAI 814, Springer-Verlag.

    Google Scholar 

  65. Benjamin C. Pierce. Type Systems and Programming Languages. MIT Press. To appear, 2002.

    Google Scholar 

  66. Benjamin C. Pierce and David N. Turner. Pict: A programming language based on the pi-calculus. Technical Report CSCI 476, Computer Science Department, Indiana University, 1997. In Proof Language and Interaction: Essays in Honour of Robin Milner, Gordon Plotkin, Colin Stirling, and Mads Tofte, editors, MIT Press, 2000.

    Google Scholar 

  67. Robert Pollack. The Theory of LEGO: A Proof Checker for the Extended Calculus of Constructions. PhD thesis, University of Edinburgh, 1994.

    Google Scholar 

  68. Garrell Pottinger. A type assignment for the strongly normalizable A-terms. In To H. B. Curry: Essays on Combinatory Logic, Lambda Calculus, and Formalism, pages 561–577. Academic Press, 1980.

    Google Scholar 

  69. Didier Rémy. Typechecking records and variants in a natural extension of ML. In Proceedings of the Sixteenth Annual ACM Symposium on Principles of Programming Languages, Austin, pages 242–249. ACM, January 1989. Also in Carl A. Gunter and John C. Mitchell, editors, Theoretical Aspects of Object-Oriented Programming: Types, Semantics, and Language Design, MIT Press, 1994.

    Google Scholar 

  70. John Reynolds. Towards a theory of type structure. In Proc. Colloque sur la Programmation, pages 408–425, New York, 1974. LNCS 19, Springer-Verlag.

    Google Scholar 

  71. John Reynolds. Using category theory to design implicit conversions and generic operators. In N. D. Jones, editor, Proceedings of the Aarhus Workshop on Semantics-Directed Compiler Generation, LNCS 94, Springer-Verlag, January 1980. Also in Carl A. Gunter and John C. Mitchell, editors, Theoretical Aspects of Object-Oriented Programming: Types, Semantics, and Language Design, MIT Press, 1994.

    Google Scholar 

  72. John C. Reynolds. Preliminary design of the programming language Forsythe. Technical Report CMU-CS-88–159, Carnegie Mellon University, June 1988.

    Google Scholar 

  73. Gerald Jay Sussman and Jr. Steele, Guy Lewis. Scheme: an interpreter for extended lambda calculus. MIT AI Memo 349, Massachusetts Institute of Technology, Cambridge, Mass., December 1975.

    Google Scholar 

  74. J.-P. Talpin and P. Jouvelot. The type and effects discipline. In Proc. IEEE Symp. on Logic in Computer Science, pages 162–173, 1992.

    Google Scholar 

  75. D. Tarditi, G. Morrisett, P. Cheng, C. Stone, R. Harper, and P. Lee. TIL: A type-directed optimizing compiler for ML. In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implemantation,pages 181–192, New York, May 21–24 1996. ACM Press.

    Google Scholar 

  76. J. E. A. K. van Benthem and Alice Ter Meulen, editors. Handbook of Logic and Language. MIT Press, 1997.

    Google Scholar 

  77. Johan van Benthem. Language in Action: Categories, Lambdas, and Dynamic Logic. MIT Press, 1995.

    Google Scholar 

  78. Mitchell Wand. Complete type inference for simple objects. In Proceedings of the IEEE Symposium on Logic in Computer Science, Ithaca, NY, June 1987.

    Google Scholar 

  79. Alfred North Whitehead and Bertrand Russell. Principia Mathematica. Cambridge University Press, 1910. Three volumes (1910; 1912; 1913).

    Google Scholar 

  80. Christoph Wille. Presenting C#. SAMS, 2000.

    Google Scholar 

  81. Extensible markup language(XMLTM).http://www.w3.org/XML/.

    Google Scholar 

  82. XML Schema Part 0: Primer, W3C Working Draft. http://www.w3.org/TR/xmischema-0/,2000.

    Google Scholar 

  83. Kathy Yelick, Luigi Semenzato, Geoff Pike, Carleton Miyamoto, Ben Liblit, Arvind Krishnamurthy, Paul Hilfinger, Susan Graham, David Gay, Phil Colella, and Alex Aiken. Titanium: a high-performance Java dialect. Concurrency: Practice and Experience,10(11–13):825–836, September 1998. Special Issue: Java for High-performance Network Computing.

    Google Scholar 

Download references

Authors

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2003 Springer Science+Business Media New York

About this chapter

Cite this chapter

Pierce, B.C. (2003). Type systems. In: McIver, A., Morgan, C. (eds) Programming Methodology. Monographs in Computer Science. Springer, New York, NY. https://doi.org/10.1007/978-0-387-21798-7_14

Download citation

  • DOI: https://doi.org/10.1007/978-0-387-21798-7_14

  • Publisher Name: Springer, New York, NY

  • Print ISBN: 978-1-4419-2964-8

  • Online ISBN: 978-0-387-21798-7

  • eBook Packages: Springer Book Archive

Publish with us

Policies and ethics