Types
Chapter Six Modern Programming Languages, 2nd ed. 1
Types Chapter Six Modern Programming Languages, 2nd ed. 1 A Type - - PowerPoint PPT Presentation
Types Chapter Six Modern Programming Languages, 2nd ed. 1 A Type Is A Set int n; When you declare that a variable has a certain type, you are saying that the values the variable can have are elements of a certain set A type is a set
Chapter Six Modern Programming Languages, 2nd ed. 1
– plus a low-level representation – plus a collection of operations that can be
Chapter Six Modern Programming Languages, 2nd ed. 2
Chapter Six Modern Programming Languages, 2nd ed. 3
– Primitive types – Constructed types
– Type annotations and type inference – Type checking – Type equivalence issues
Chapter Six Modern Programming Languages, 2nd ed. 4
Any type that a program can use but cannot define
Any type that a program can define for itself (using
Some primitive types in ML: int, real, char
– An ML program cannot define a type named int that
A constructed type: int list
– Defined using the primitive type int and the list type
Chapter Six Modern Programming Languages, 2nd ed. 5
– Some define the primitive types exactly (Java) – Others leave some wiggle room—the primitive
Chapter Six Modern Programming Languages, 2nd ed. 6
Chapter Six Modern Programming Languages, 2nd ed. 7
What sets do the primitive types signify?
– How much is part of the language specification, how
– If necessary, how can a program find out? (INT_MAX
What operations are supported?
– Detailed definitions: rounding, exceptions, etc.
The choice of representation is a critical part of
Chapter Six Modern Programming Languages, 2nd ed. 8
– Primitive types – Constructed types
– Type annotations and type inference – Type checking – Type equivalence issues
Chapter Six Modern Programming Languages, 2nd ed. 9
Chapter Six Modern Programming Languages, 2nd ed. 10
Chapter Six Modern Programming Languages, 2nd ed. 11
Chapter Six Modern Programming Languages, 2nd ed. 12
type primaryColors = (red, green, blue);
datatype day = M | Tu | W | Th | F | Sa | Su;
Chapter Six Modern Programming Languages, 2nd ed. 13
enum coin { penny = 1, nickel = 5, dime = 10, quarter = 25 }; enum escapes { BELL = '\a', BACKSPACE = '\b', TAB = '\t', NEWLINE = '\n', VTAB = '\v', RETURN = '\r' };
Chapter Six Modern Programming Languages, 2nd ed. 14
fun isWeekend x = (x = Sa orelse x = Su);
P(C)
Chapter Six Modern Programming Languages, 2nd ed. 15
Chapter Six Modern Programming Languages, 2nd ed. 16
struct complex { double rp; double ip; };
type complex = { rp:real, ip:real }; fun getip (x : complex) = #ip x;
– in what order? – with “holes” to align elements (e.g. on word
– is any or all of this visible to the programmer?
Chapter Six Modern Programming Languages, 2nd ed. 17
Chapter Six Modern Programming Languages, 2nd ed. 18
The C Programming Language, 2nd ed. Brian W. Kernighan and Dennis M. Ritchie
Chapter Six Modern Programming Languages, 2nd ed. 19
Chapter Six Modern Programming Languages, 2nd ed. 20
– What are the index values? – Is the array size fixed at compile time?
Chapter Six Modern Programming Languages, 2nd ed. 21
– First element of an array a is a[0] – Indexes are always integers starting from 0
– Various index types are possible: integers,
– Starting index chosen by the programmer – Ending index too: size is fixed at compile time
Chapter Six Modern Programming Languages, 2nd ed. 22
Chapter Six Modern Programming Languages, 2nd ed. 23
Chapter Six Modern Programming Languages, 2nd ed. 24
What are the index values? Is array size fixed at compile time (part of static type)? What operations are supported? Is redimensioning possible at runtime? Are multiple dimensions allowed? Is a higher-dimensional array the same as an array of arrays? What is the order of elements in memory? Is there a separate type for strings (not just array of characters)? Is there a separate type for lists?
Chapter Six Modern Programming Languages, 2nd ed. 25
Chapter Six Modern Programming Languages, 2nd ed. 26
Chapter Six Modern Programming Languages, 2nd ed. 27
Chapter Six Modern Programming Languages, 2nd ed. 28
Chapter Six Modern Programming Languages, 2nd ed. 29
Chapter Six Modern Programming Languages, 2nd ed. 30
The C Programming Language, 2nd ed. Brian W. Kernighan and Dennis M. Ritchie
Chapter Six Modern Programming Languages, 2nd ed. 31
Chapter Six Modern Programming Languages, 2nd ed. 32
type DEVICE is (PRINTER, DISK); type PERIPHERAL(Unit: DEVICE) is record HoursWorking: INTEGER; case Unit is when PRINTER => Line_count: INTEGER; when DISK => Cylinder: INTEGER; Track: INTEGER; end case; end record;
Chapter Six Modern Programming Languages, 2nd ed. 33
– Less general: Pascal subranges
– More general: Ada subtypes
– Most general: Lisp types with predicates
Chapter Six Modern Programming Languages, 2nd ed. 34
Chapter Six Modern Programming Languages, 2nd ed. 35
type DEVICE is (PRINTER, DISK); type PERIPHERAL(Unit: DEVICE) is record HoursWorking: INTEGER; case Unit is when PRINTER => Line_count: INTEGER; when DISK => Cylinder: INTEGER; Track: INTEGER; end case; end record; subtype DISK_UNIT is PERIPHERAL(DISK);
Chapter Six Modern Programming Languages, 2nd ed. 36
(declare (type integer x)) (declare (type (or null cons) x)) (declare (type (and number (not integer)) x)) (declare (type (and integer (satisfies evenp)) x))
– Do you try to shorten it if you can? Does
– Do you enforce the subtyping? Is X := 10
Chapter Six Modern Programming Languages, 2nd ed. 37
Chapter Six Modern Programming Languages, 2nd ed. 38
Chapter Six Modern Programming Languages, 2nd ed. 39
Chapter Six Modern Programming Languages, 2nd ed. 40
Chapter Six Modern Programming Languages, 2nd ed. 41
Chapter Six Modern Programming Languages, 2nd ed. 42
– Primitive types – Constructed types
– Type annotations and type inference – Type checking – Type equivalence issues
Chapter Six Modern Programming Languages, 2nd ed. 43
Chapter Six Modern Programming Languages, 2nd ed. 44
– Dialects of BASIC: S$ is a string – Dialects of Fortran: I is an integer
Chapter Six Modern Programming Languages, 2nd ed. 45
Chapter Six Modern Programming Languages, 2nd ed. 46
– Java: 10 has type int, 10L has type long
– Java: if a is double, a*0 is double (0.0)
Chapter Six Modern Programming Languages, 2nd ed. 47
– Primitive types – Constructed types
– Type annotations and type inference – Type checking – Type equivalence issues
Chapter Six Modern Programming Languages, 2nd ed. 48
– Operators: 1+"abc" – Functions: round("abc") – Statements: if "abc" then …
Chapter Six Modern Programming Languages, 2nd ed. 49
Chapter Six Modern Programming Languages, 2nd ed. 50
Chapter Six Modern Programming Languages, 2nd ed. 51
Chapter Six Modern Programming Languages, 2nd ed. 52
– Subtypes can cause this – Everything is typed at compile time, but
– At runtime, it may be necessary to check a
– This problem arises in object-oriented
Chapter Six Modern Programming Languages, 2nd ed. 53
– Static types can be inferred for parts of Lisp
– Lisp compilers can use static type information
Chapter Six Modern Programming Languages, 2nd ed. 54
– Java: test object type with instanceof
– Modula-3: branch on object type with
Chapter Six Modern Programming Languages, 2nd ed. 55
The purpose of type-checking is to prevent the
In some languages, like ML and Java, the type-
Many languages (like C) fall short of this: there
Chapter Six Modern Programming Languages, 2nd ed. 56
– Primitive types – Constructed types
– Type declarations and inference – Static and dynamic typing – Type equivalence issues
Chapter Six Modern Programming Languages, 2nd ed. 57
Chapter Six Modern Programming Languages, 2nd ed. 58
Chapter Six Modern Programming Languages, 2nd ed. 59
– Name equivalence does not permit this:
– Structural equivalence does permit this, since
Chapter Six Modern Programming Languages, 2nd ed. 60
– Name equivalence does not permit this: the
– Structural equivalence does permit this, since
Chapter Six Modern Programming Languages, 2nd ed. 61
A key question for type systems: how much of the
Some programmers prefer languages like C that
– They offer the power to cut through type abstractions,
Others prefer languages like ML that hide all
– Clean, mathematical interfaces make it easier to write
Chapter Six Modern Programming Languages, 2nd ed. 62