Unit 8 Study Guide
- Explain the concept of a data type and why they are useful.
 - Explain the differences between primitive, user-defined, structured, and ordinal data types.
 - Explain what a variable descriptor is and what it contains.
 - List and describe standard numeric types such as integer, float, double, complex, and decimal.
 - List and describe various ordinal types including Boolean, character, enumeration, and subrange types.
 - Explain design issues for floating-point numbers.
 - Explain design issues for strings and compare various implementation alternatives.
 - Explain array types and the various ways arrays are implemented.
 - List and explain array operations.
 - Calculate byte offsets from array base address, dimensions, and element width.
 - Explain the differences between tuple and list types.
 - Explain what associative arrays are and how they are implemented.
 - Explain what records are and how they are implemented.
 - Explain what union types are, how they are implemented, and how issues of type safety can be resolved.
 - Explain what pointer and reference types are and how they differ.
 - Explain pointer operations and issues (dangling pointers, memory leaks) that arise with the use of pointers.
 - Explain the reference count and mark-and-sweep methods of garbage collection.
 - Explain what type checking is and why it is important.
 - Define type systems, type compatibility, type errors, and type conversions.
 - Contrast explicit and implicit typing, give examples of languages that use each, and explain the tradeoffs involved.
 - Contrast strong typing and weak typing, give examples of languages that use each, and explain the tradeoffs involved.
 - Contrast static type checking and dynamic type checking, give examples of languages that use each, and explain the tradeoffs involved.
 - Explain why type equivalence is important and compare name equivalence and structure equivalence, giving examples to illustrate each one.