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.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Similar content being viewed by others
Notes
- 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.
“A type is a class of values. Associated with each type there are a number of operations which apply to such values”.
- 3.
“Class” is, however, the terminology of Simula 67; in Simula I they are called activities.
- 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.
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.
For a pedagogical discussion, see [11], Chap. 10.
- 7.
An expression of Vladimir Voevodsky.
References
Abadi, M., Cardelli, L.: A semantics of object types. In: Ninth Annual IEEE Symposium on Logic in Computer Science, pp. 332–341 (1994)
Abadi, M., Cardelli, L.: A Theory of Objects. Springer, New York (1996)
Burstall, R.: Proving properties of programs by structural induction. Comput. J. 12(1), 41–48 (1969)
Burstall, R., Landin, P.J.: Programs and their proofs: an algebraic approach. Mach. Intell. 4, 17–43 (1969)
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)
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)
Curry, H.B.: On the composition of programs for automatic computing. Technical report Memorandum 10337, Naval Ordnance Laboratory (1949)
Dahl, O.-J., Hoare, C.A.R.: Hierarchical program structures. In: Structured Programming, Chap. 3, pp. 175–220. Academic Press (1972)
Dahl, O.-J., Nygaard, K.: Simula: an ALGOL-based simulation language. Commun. ACM 9(9), 671–678 (1966)
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)
Gabbrielli, M., Martini, S.: Programming Languages: Principles and Paradigms. Undergraduate Topics in Computer Science. Springer, Heidelberg (2010)
Goguen, J.: Some comments on data abstraction. Notes for a course at ETH Zurich (1973)
Goldberg, A., Kay, A.: Smalltalk-72 instruction manual. Technical report SSL 76-6. Learning Research Group, Xerox Palo Alto Research Center (1976)
Guttag, J.: The specification and application to programming of abstract data types. Ph.D. thesis, University of Toronto (1975)
Hoare, C.A.R.: Record handling. ALGOL Bull. 21, 39–69 (1965)
Hoare, C.A.R.: Notes on data structuring. In: Structured Programming, Chap. 2, pp. 83–174. Academic Press (1972)
Hoare, C.A.R.: Proof of correctness of data representation. Acta Informatica 1, 271–281 (1972)
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)
Liskov, B., Snyder, A., Atkinson, R., Schaffert, C.: Abstraction mechanisms in CLU. Commun. ACM 20(8), 564–576 (1977)
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)
Martini, S.: Several types of types in programming languages. Paper Presented at HAPOC 2015, Pisa (2015)
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)
Milner, R.: A theory of type polymorphism in programming. J. Comput. Syst. Sci. 17(3), 348–375 (1978)
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)
Parnas, D.L.: On the criteria to be used in decomposing systems into modules. CACM 15(2), 1053–1058 (1972)
Perlis, A.J., Samelson, K.: Preliminary report: international algebraic language. Commun. ACM 1(12), 8–22 (1958)
Priestley, M.: A Science of Operations. Machines, Logic and the Invention of Programming. Springer, Heidelberg (2011)
Reddy, U.S.: Objects of closures: abstract semantics of object oriented languages. In: ACM Conference on Lisp and functional programming. ACM (1988)
Reynolds, J.C.: Towards a theory of type structure. In: Robinet, B. (ed.) Programming Symposium. LNCS, vol. 19, pp. 408–423. Springer, London (1974)
Sites, R.L.: Algol W reference manual. Technical report STAN-CS-71-230, Computer Science Department, Stanford University (1972)
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights 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)