Complex Data Types 6 1 One very important

  • Slides: 17
Download presentation
Complex Data Types (6. 1) · One very important measure of the “goodness” of

Complex Data Types (6. 1) · One very important measure of the “goodness” of a PL is the capability of its data types to model the problem space variables · Design issues for all data types – what is the syntax of references to variables? – what operations are defined and how are they specified? · Compilers use descriptors to maintain information about instances of types in a program – actually part of the symbol table – what’s needed in descriptor depends on particular type – when the descriptor is needed depends on the kind of type checking required » static, compile time only » dynamic, run-time as well

(6. 2) · Primitive types – Numeric – Boolean – Character strings – Ordinal

(6. 2) · Primitive types – Numeric – Boolean – Character strings – Ordinal

Numeric Types · Range and Precision – Integer – Real – Decimal (6. 3)

Numeric Types · Range and Precision – Integer – Real – Decimal (6. 3)

(6. 4) · Boolean

(6. 4) · Boolean

(6. 5) · Character string

(6. 5) · Character string

Character String Issues · Primitive or not – Snobol, Java primitive – Ada, F

Character String Issues · Primitive or not – Snobol, Java primitive – Ada, F 77, F 90, Basic “somewhat” primitive – Pascal, C, C++ not primitive · Static or dynamic – Or limited length dynamic · Operations (6. 6)

Strings (continued) (6. 7) · Evaluation – aid to writability – as a primitive

Strings (continued) (6. 7) · Evaluation – aid to writability – as a primitive type with static length, they are inexpensive to provide--why not have them? – dynamic length is nice, but is it worth the expense? · Implementation – static length - compile-time descriptor – limited dynamic length - may need a run-time descriptor for length (but not in C and C++) – dynamic length - need run-time descriptor; allocation/deallocation is the biggest problem

(6. 8) · Ordinal – Enumeration – Subrange

(6. 8) · Ordinal – Enumeration – Subrange

(6. 9) · Arrays

(6. 9) · Arrays

Arrays · Definition · Mapping – Row major or column major · Memory allocation

Arrays · Definition · Mapping – Row major or column major · Memory allocation – Static – Fixed stack dynamic – Stack dynamic – Heap dynamic · Slices · Associative arrays · Operations (6. 10)

(6. 11) · Records

(6. 11) · Records

Records · Definition · Mapping – Faster than array subscripts – Elliptical references (COBOL,

Records · Definition · Mapping – Faster than array subscripts – Elliptical references (COBOL, PL/I) · Operations – Move corresponding (6. 12)

(6. 13) · Unions

(6. 13) · Unions

Unions · Definition – Not in Java · Type checking? – Ada yes, others

Unions · Definition – Not in Java · Type checking? – Ada yes, others no · Useful but dangerous (6. 14)

(6. 15) · Sets – Pascal, Java

(6. 15) · Sets – Pascal, Java

(6. 16) · Pointers

(6. 16) · Pointers

Pointers · Operations – Assignment and dereferencing · Dynamic storage management or indirect addressing?

Pointers · Operations – Assignment and dereferencing · Dynamic storage management or indirect addressing? · Scope/lifetime of pointers and associated dynamic objects? · Problems – Dangling references, lost objects · Storage management – Reference counts, garbage collection · Java allows only references – Implicit deallocation (6. 17)