1 / 25

Adapted from slides for COMP 144 Programming Language Concepts Spring 2002

The University of North Carolina at Chapel Hill. Adapted from slides for COMP 144 Programming Language Concepts Spring 2002. by Felix Hernandez-Campos. Data Types. Computers manipulate sequences of bits But most programs manipulate more general data Numbers String Lists …

knightjon
Download Presentation

Adapted from slides for COMP 144 Programming Language Concepts Spring 2002

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. The University of North Carolina at Chapel Hill Adapted from slides for COMP 144 Programming Language Concepts Spring 2002 by Felix Hernandez-Campos

  2. Data Types • Computers manipulate sequences of bits • But most programs manipulate more general data • Numbers • String • Lists • … • Programming languages provide data types that raise the level of abstraction from bits to data • But computer hardware only knows about bits!

  3. Data TypesThe Purpose of Types • Types provide implicit context • Compilers can infer more information, so programmers write less code • E.g. the expression a+b in Java may be adding two integer, two floats or two strings depending on the context • Types provides a set of semantically valid operations • Compilers can detect semantic mistakes • E.g. Python’s lists support append() and pop(), but complex numbers do not.

  4. Type Systems • High-level languages have type systems • All objects and expressions have a type • E.g.void (*)(const int) is the type of a C++ function • A type system consists of • A mechanism for defining types and associating them with certain language constructs • A set of rules for type checking • Type equivalence • Type compatibility • Type inference

  5. Type SystemsType Checking • Type checking is the process of ensuring that a program obeys the language’s type compatibility rules • Strongly typed languages always detect types errors • Weakly typed languages do not • All expressions and objects must have a type • All operations must be applied in appropriate type contexts • Statically typed languages are strongly typed language in which all type checking occurs at compile type • Dynamically typed languages: some checking at run-time

  6. What is a type? • Three points of view: • Denotational: a set of values • Constructive: a type is built-in type or a composite type • Composite types are created using type constructors • E.g. In Java, boolean is a built-in type, while boolean[] is a composite type • Abstraction-based: a type is an interface that defines a set of consistent operations • These points of view complement each other

  7. Classification of TypesBuilt-in Types • Built-in/Primitive/Elementary types • Mimic hardware units • E.g. boolean, character, integer, real (float) • Their implementation varies across languages • Characters are traditionally one-byte quantities using the ASCII character set • Early computers had a different byte sizes • Byte = 8 bits standardized by Fred Brooks et al. thanks to the IBM System/360 • Other character sets have also been used

  8. Built-in TypesUnicode Characters • Newer languages have built-in characters that support the Unicode character set • http://www.unicode.org/unicode/standard/WhatIsUnicode.html • Unicode is implemented using two-byte quantities • E.g. Java • http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html • E.g. Python • u”¡Hola!” • http://www.python.org/doc/current/tut/node5.html#SECTION005130000000000000000

  9. Built-in TypesNumeric Types • Most languages support integers and floats • The range of value is implementation dependent • Some languages support other numeric types • Complex numbers (e.g. Fortran, Python) • Rational numbers (e.g. Scheme, Common Lisp) • Signed and unsigned integers (e.g. C, Modula-2) • Fixed point numbers (e.g. Ada) • Some languages distinguish numeric types depending on their precision • Single vs. double precision numbers • C’s int (4 bytes) and long (8 bytes)

  10. Classification of TypesEnumerations • Enumeration improve program readability and error checking • They were first introduced in Pascal • E.g. type weekday = (sun, mon, tue, wed, thu, fri, sat); • They define an order, so they can be used in enumeration-controlled loops • The same feature is available in C • enum weekday {sun, mon, tue, wed, thu, fri, sat}; • Other languages use constants to define enumeration • Pascal’s approach is more complete: integers and enumerations are not compatible

  11. Classification of TypesSubranges • Subranges improve program readability and error checking • They were first introduced in Pascal • E.g. type test_score = 0..100; workday = mon..fri; • They define an order, so they can be used in enumeration-controlled loops

  12. Classification of TypesComposite Types • Composite/Constructed types are created applying a constructor to one or more simpler types • Examples • Records • Variant Records • Arrays • Sets • Pointers • Lists • Files

  13. Classification of TypesOrthogonality • Orthogonality is an important property in the design of type systems • More orthogonal languages support have more flexible composite types • Scheme is a good example

  14. Records

  15. RecordsMemory Layout • Basic layout in 32-bit machines • There may be holes in the allocation of memory

  16. RecordsMemory Layout • Packed layout • Rearranging record field

  17. RecordsImplications of Memory Layout • More memory efficient layouts have several drawbacks • Assignments require multiple instructions • Masking and shifting operations • Access to record elements requires multiple instructions • Masking and shifting operations • Holes complicate record equality • Requires field by field comparison or default values in holes • Some languages forbid record comparison • E.g. Pascal, C

  18. Variant Records • A variant record provides two or more alternative fields or collections of fields, but only one bit is valid at any given time • They are called unions in C/C++

  19. Variant RecordsMemory Layout • Some languages, like C, do not check whether variant records are properly accessed • Other languages keep track of the value in an additional field, increasing safety

  20. ArraysMemory Layout • Arrays are usually stored in contiguous locations • Two common orders for 2D arrays

  21. ArraysMemory Layout • Contiguous allocation vs. row pointers

  22. ArraysAddress Calculations • Code generation for a 3D array • A: array [L1..U1] of array [L2..U2] of array [L3..U3] of elem_type

  23. Compile-Time Constant ArraysAddress Calculations Row-Major Order Optimization

  24. Pointer Data Type • Contains an address or NULL • Provides indirect addressing and dynamic storage management • Operations – assignment and dereferencing • Problems – dangling pointers, memory leaks • Language question – does it provide solutions to these problems? (ex. C++)

  25. Reference Data Type • Like a pointer but usually more limited • C++ reference type is constant – can’t be reassigned • Java reference type is like a pointer except safer – why?

More Related