data types data types
play

Data Types Data Types Evolution of Data Types: COSC337 FORTRAN - PDF document

Data Types Data Types Evolution of Data Types: COSC337 FORTRAN I (1956) - INTEGER, REAL, arrays COBOL allowed users to define precision ALGOL (1968) provided a few basic types, and by Matt Evett allowed user to form new


  1. Data Types Data Types • Evolution of Data Types: COSC337 – FORTRAN I (1956) - INTEGER, REAL, arrays… – COBOL allowed users to define precision – ALGOL (1968) provided a few basic types, and by Matt Evett allowed user to form new aggregate types. – Ada (1983) - User can create a unique type for every category of variables in the problem space adopted from slides by Robert Sebesta and have the system enforce the types Descriptors Primitive Data Types: • Def: A descriptor is the collection of the • Primitive Data Types are those types not attributes of a variable defined in terms of other data types. – If all attributes are static, descriptors are required • Integer only at compilation time (usually stored within – Almost always an exact reflection of the hardware, compiler’s symbol table) so the mapping is trivial – If dynamic, this information must be stored in – There may be as many as eight different integer memory (Lisp does this via property lists ) and types in a language used by run-time system. • Ex: int, long, char, byte • Data type is part of a descriptor. Floating Point Internal Representation of Floats • Model real numbers, but only approximately • IEEE Floating-Point Standard 754 • Languages for scientific use support at least sign bit two floating-point types 8 bits 23 bits • Usually the representation matches the exponent fraction hardware’s, but not always; some languages allow accuracy specs in code 11 bits 52 bits exponent fraction – e.g. (Ada) • type SPEED is digits 7 range 0.0..1000.0; • type VOLTAGE is delta 0.1 range -12.0..24.0;

  2. Decimal Boolean • Common in systems supporting financial applications • Could be implemented as bits, but often as • Store a fixed number of decimal digits (coded) bytes – Advantage: accuracy • Advantage: readability – Disadvantages: limited range, wastes memory Strings Examples of Strings • Pascal • Values are sequences of characters – Not primitive; assignment and comparison only (of • Design issues: packed arrays) – Is it a primitive type or just a special kind of array? • Ada, FORTRAN 77, FORTRAN 90 and – Is the length of objects static or dynamic? BASIC • Operations: – Somewhat primitive – Assignment – Assignment, comparison, catenation, substring reference – Comparison (=, >, etc.) – FORTRAN has an intrinsic for pattern matching – Catenation (or “concatenation”) – Ada provides catenation (N := N1 & N2 ) and – Substring reference substrings (N(2..4)) – Pattern matching (find matching substrings, etc.) Strings in C More String Examples • C • SNOBOL4 (a string manipulation language) – Not primitive – Primitive – Use char arrays and a library of functions that – Many operations, including elaborate pattern provide operations matching • C++ • Perl – Provides C-style strings – Patterns are defined in terms of regular expressions – Use of STL class provides “primitive” strings • A very powerful facility! Similar to Unix’s grep • e.g: /[A-Za-z][A-Za-z\d]+/ • Java – String class primitive

  3. String Length Encoding Utility (of string types): • String Length Options: • Aid to writability • Static - FORTRAN 77, Ada, COBOL • As a primitive type with static length, they are inexpensive to provide--why not have them? – e.g. (FORTRAN 90) CHARACTER (LEN = 15) NAME; • Dynamic length is nice, but is it worth the – NAME knows its own length expense? • Limited Dynamic Length - C and C++ actual – An additional pointer indirection. length is indicated implicitly by a null character delimiter • Dynamic - SNOBOL4, Perl, C++ and Java String classes Implementing Strings Ordinal Types • Static strings - compile-time descriptor • Def: ordinal type = range of possible values can be easily associated with the set of positive • Limited dynamic strings - may need a run-time integers descriptor for current & max length – Enumeration – But not in C and C++. Of course there’s no index checking provided! – Subrange • Dynamic strings - need run-time descriptor; allocation/deallocation is the biggest implementation problem Enumerations Enumerations in Languages • The user enumerates all of the possible values, • Pascal which are symbolic constants. – cannot reuse constants; they can be used for array subscripts, for variables, case selectors; NO input – Design Issue: Should a symbolic constant be or output; can be compared. allowed to be in more than one enumeration type? • Predecessor and successor functions, loops • No in C, C++, Pascal, because they’re implicitly converted into integers. • Ada • Ex (Pascal): – constants can be reused (overloaded literals); type WATER_TEMP = ( Frigid, Cold, Warm, Hot); disambiguate with context or type_name ‘ (one of them); can be used as in Pascal; CAN be input var temp : WATER_TEMP; … and output if temp > Warm ...

  4. Enumeration in Languages (2) Utility (of enumerations) • C and C++ • Aid to readability--e.g. no need to code a color as a number – like Pascal, except they can be input and output as integers • Aid to reliability--e.g. compiler can check • Java does not include an enumeration type operations and ranges of values – E.g. Don’t have to worry about bad indices: • int dailyHighTemp[MONDAY] vs. • int dailyHighTemp[1] Subrange Type Examples of Subrange Types • An ordinal type representing an ordered contiguous subsequence of another ordinal – Ada • Subtypes are not new types, just constrained existing types (so type they are compatible); can be used as in Pascal, plus case • Examples: constants – Pascal • Ex: subtype POS_TYPE is INTEGER range 0 ..INTEGER'LAST; • Subrange types behave as their parent types; can be used as for variables and array indices e.g. type pos = 0 .. MAXINT; Implementating user-defined Utility of subrange types: ordinal types • Aid to readability • Enumeration types are implemented as integers • Aid to reliability - restricted ranges add error • Subrange types are the parent types with code detection inserted (by the compiler) to restrict assignments to subrange variables

  5. Arrays Indexing • A homogeneous aggregate of data elements in • Def: mapping from indices to elements which an individual element is identified by its map(array_name, index_value_list) : an element position in the aggregate, relative to the first. • Syntax • Design Issues: – FORTRAN, PL/I, Ada use parentheses – What types are legal for subscripts? – Most others use brackets – Are subscripting expressions in element references range checked? • Subscript Types: – When are subscript ranges bound? – FORTRAN, C - int only – When does allocation take place? – What is the maximum number of subscripts? – Pascal - any ordinal type (int, boolean, char, enum) – Can array objects be initialized? – Ada - int or enum (includes boolean and char) – Are any kind of slices allowed? – Java - integer types only Categories of Arrays Static and Fixed Stack • Static • (based on subscript binding and binding to – range of subscripts and storage bindings are static storage) – e.g. FORTRAN 77, some arrays in Ada, static and global C arrays – Static – Advantage: execution efficiency (no allocation or – Fixed stack dynamic deallocation) – Stack-dynamic • Fixed stack dynamic – Heap-dynamic – range of subscripts is statically bound, but storage is bound at elaboration time – e.g. Pascal locals and, C locals that are not static – Advantage: space efficiency Stack-Dynamic Heap-dynamic • Subscript range and storage bindings are • Range and storage are dynamic, but fixed from dynamic and not fixed then on for the variable’s lifetime • e.g. (FORTRAN 90) • e.g. Ada declare blocks: INTEGER, ALLOCATABLE, ARRAY (:,:) :: MAT (Declares MAT to be a dynamic 2-dim array) declare ALLOCATE (MAT (10, NUMBER_OF_COLS)) STUFF : array (1..N) of FLOAT; (Allocates MAT to have 10 rows and begin NUMBER_OF_COLS columns) ... DEALLOCATE MAT end; (Deallocates MAT’s storage) • Advantage: flexibility - size need not be • APL & Perl: arrays grow and shrink as needed known until the array is about to be used • In Java, all arrays are objects (heap-dynamic)

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend