Skip to main content

Types in Programming Languages, Between Modelling, Abstraction, and Correctness

Extended Abstract

  • Conference paper
  • First Online:
Pursuit of the Universal (CiE 2016)

Part of the book series: Lecture Notes in Computer Science ((LNTCS,volume 9709))

Included in the following conference series:

Abstract

The notion of type to designate a class of values, and the operations on those values, is a central feature of any modern programming language. In fact, we keep calling them programming languages, but the part of a modern language devoted to the actual specification of the control flow (that is, programming stricto sensu) is only a fraction of the language itself, and two different languages are not much apart under that perspective. What “makes a language” are much more its modelling capabilities to describe complex relations between portions of code and between data. In a word, the central part of a language is made by the abstraction mechanisms it provides to model its application domain(s), all issues the language theorist may well group together in the type chapter of a language definition.

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

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 39.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 54.99
Price excludes VAT (USA)
  • Compact, lightweight 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

Similar content being viewed by others

Notes

  1. 1.

    The very first use of the term “type” in programming is probably Curry’s [7], to distinguish between memory words containing instructions (“orders”) and those containing data (“quantities”). These reports by Curry, as reconstructed by [10], contain a surprising, non-trivial mathematical theory of programs, up to a theorem analogous to the “well-typed expressions do not go wrong” of [23]! Despite G.W. Patterson’s review on JSL 22(01), 1957, 102–103, we do not know of any influence of this theory on subsequent developments of programming languages.

  2. 2.

    “A type is a class of values. Associated with each type there are a number of operations which apply to such values”.

  3. 3.

    “Class” is, however, the terminology of Simula 67; in Simula I they are called activities.

  4. 4.

    Under this term Priestly refers to the “coherent and comprehensive research programme within which the Algol 60 report had the status of a paradigmatic achievement, in the sense defined by the historian of science Thomas Kuhn. This research programme established the first theoretical framework for studying not only the design of programming languages, but also the process of software development.” Therefore, are grouped under this broad term the developments of structured programming, of software engineering à la Dijkstra, of the formal description of programming language semantics, etc.

  5. 5.

    A language provides representation independence if two correct implementations of a single specification of an ADT are observationally indistinguishable by the clients of these types.

  6. 6.

    For a pedagogical discussion, see [11], Chap. 10.

  7. 7.

    An expression of Vladimir Voevodsky.

References

  1. Abadi, M., Cardelli, L.: A semantics of object types. In: Ninth Annual IEEE Symposium on Logic in Computer Science, pp. 332–341 (1994)

    Google Scholar 

  2. Abadi, M., Cardelli, L.: A Theory of Objects. Springer, New York (1996)

    Book  MATH  Google Scholar 

  3. Burstall, R.: Proving properties of programs by structural induction. Comput. J. 12(1), 41–48 (1969)

    Article  MATH  Google Scholar 

  4. Burstall, R., Landin, P.J.: Programs and their proofs: an algebraic approach. Mach. Intell. 4, 17–43 (1969)

    MathSciNet  MATH  Google Scholar 

  5. Cook, W.R.: Object-oriented programming versus abstract data types. In: de Bakker, J.W., de Roever, W.P., Rozenberg, G. (eds.) Foundations of Object-Oriented Languages. LNCS, vol. 489, pp. 151–178. Springer, Heidelberg (1990)

    Chapter  Google Scholar 

  6. Cook, W.R., Hill, W., Canning, P.S.: Inheritance is not subtyping. In: Proceedings of the 17th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 1990, pp. 125–135. ACM, New York, NY, USA (1990)

    Google Scholar 

  7. Curry, H.B.: On the composition of programs for automatic computing. Technical report Memorandum 10337, Naval Ordnance Laboratory (1949)

    Google Scholar 

  8. Dahl, O.-J., Hoare, C.A.R.: Hierarchical program structures. In: Structured Programming, Chap. 3, pp. 175–220. Academic Press (1972)

    Google Scholar 

  9. Dahl, O.-J., Nygaard, K.: Simula: an ALGOL-based simulation language. Commun. ACM 9(9), 671–678 (1966)

    Article  MATH  Google Scholar 

  10. De Mol, L., Carlé, M., Bullyinck, M.: Haskell before Haskell: an alternative lesson in practical logics of the ENIAC. J. Logic Comput. 25(4), 1011–1046 (2015)

    Article  MathSciNet  MATH  Google Scholar 

  11. Gabbrielli, M., Martini, S.: Programming Languages: Principles and Paradigms. Undergraduate Topics in Computer Science. Springer, Heidelberg (2010)

    Book  MATH  Google Scholar 

  12. Goguen, J.: Some comments on data abstraction. Notes for a course at ETH Zurich (1973)

    Google Scholar 

  13. Goldberg, A., Kay, A.: Smalltalk-72 instruction manual. Technical report SSL 76-6. Learning Research Group, Xerox Palo Alto Research Center (1976)

    Google Scholar 

  14. Guttag, J.: The specification and application to programming of abstract data types. Ph.D. thesis, University of Toronto (1975)

    Google Scholar 

  15. Hoare, C.A.R.: Record handling. ALGOL Bull. 21, 39–69 (1965)

    MATH  Google Scholar 

  16. Hoare, C.A.R.: Notes on data structuring. In: Structured Programming, Chap. 2, pp. 83–174. Academic Press (1972)

    Google Scholar 

  17. Hoare, C.A.R.: Proof of correctness of data representation. Acta Informatica 1, 271–281 (1972)

    Article  MATH  Google Scholar 

  18. Howard, W.A.: The formulae-as-types notion of construction. In: Seldin, J.P., Hindley, J.R. (eds.) To H.B. Curry: Essays on Combinatory Logic Lambda Calculus and Formalism, pp. 479–490. Academic Press, Cambridge (1980)

    Google Scholar 

  19. Liskov, B., Snyder, A., Atkinson, R., Schaffert, C.: Abstraction mechanisms in CLU. Commun. ACM 20(8), 564–576 (1977)

    Article  MATH  Google Scholar 

  20. Liskov, B., Zilles, S.: Programming with abstract data types. In: Proceedings of the ACM SIGPLAN Symposium on Very High Level Languages, pp. 50–59. ACM (1972)

    Google Scholar 

  21. Martini, S.: Several types of types in programming languages. Paper Presented at HAPOC 2015, Pisa (2015)

    Google Scholar 

  22. McCarthy, J.: A basis for a mathematical theory of computation, preliminary report. In: Papers Presented at the May 9–11, 1961, Western Joint IRE-AIEE-ACM Computer Conference, IRE-AIEE-ACM 1961 (Western), pp. 225–238, New York, NY, USA. ACM (1961)

    Google Scholar 

  23. Milner, R.: A theory of type polymorphism in programming. J. Comput. Syst. Sci. 17(3), 348–375 (1978)

    Article  MathSciNet  MATH  Google Scholar 

  24. Morris, J.H.: Types are not sets. In: Proceedings of the 1st Annual ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages, POPL 1973, pp. 120–124. ACM, New York, NY, USA (1973)

    Google Scholar 

  25. Parnas, D.L.: On the criteria to be used in decomposing systems into modules. CACM 15(2), 1053–1058 (1972)

    Article  Google Scholar 

  26. Perlis, A.J., Samelson, K.: Preliminary report: international algebraic language. Commun. ACM 1(12), 8–22 (1958)

    Article  MATH  Google Scholar 

  27. Priestley, M.: A Science of Operations. Machines, Logic and the Invention of Programming. Springer, Heidelberg (2011)

    MATH  Google Scholar 

  28. Reddy, U.S.: Objects of closures: abstract semantics of object oriented languages. In: ACM Conference on Lisp and functional programming. ACM (1988)

    Google Scholar 

  29. Reynolds, J.C.: Towards a theory of type structure. In: Robinet, B. (ed.) Programming Symposium. LNCS, vol. 19, pp. 408–423. Springer, London (1974)

    Chapter  Google Scholar 

  30. Sites, R.L.: Algol W reference manual. Technical report STAN-CS-71-230, Computer Science Department, Stanford University (1972)

    Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Simone Martini .

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2016 Springer International Publishing Switzerland

About this paper

Cite this paper

Martini, S. (2016). Types in Programming Languages, Between Modelling, Abstraction, and Correctness. In: Beckmann, A., Bienvenu, L., Jonoska, N. (eds) Pursuit of the Universal. CiE 2016. Lecture Notes in Computer Science(), vol 9709. Springer, Cham. https://doi.org/10.1007/978-3-319-40189-8_17

Download citation

  • DOI: https://doi.org/10.1007/978-3-319-40189-8_17

  • Published:

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-319-40188-1

  • Online ISBN: 978-3-319-40189-8

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics