Type Checking. Type Checking? Type checking is the process of verifying that each operation executed...
-
Upload
walter-richards -
Category
Documents
-
view
214 -
download
0
Transcript of Type Checking. Type Checking? Type checking is the process of verifying that each operation executed...
![Page 1: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/1.jpg)
Type Checking
![Page 2: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/2.jpg)
![Page 3: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/3.jpg)
Type Checking?• Type checking is the process of verifying that
each operation executed in a program respects the type system of the language.
• This generally means that all operands in any expression are of appropriate types and
number.• Much of what we do in the semantic analysis
phase is type checking.
![Page 4: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/4.jpg)
Designing a Type Checker
• When designing a type checker for a compiler, here’s the process:
1.Identify the types that are available in the language 2.Identify the language constructs that have types
associated with them 3. Identify the semantic rules for the language
![Page 5: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/5.jpg)
Cond…
• If a problem is found, e.g., one tries to add a char to a double in C, we encounter a type error.
• A language is considered strongly- typed if each and every type error is detected during compilation.
• Type checking can be done compilation, during execution, or divided across both.
![Page 6: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/6.jpg)
Static type checking
• Static type checking is done at compile-time. The information the type checker needs is obtained via declarations and stored in a master symbol table.
• After this information is collected, the types involved in each operation are checked.
![Page 7: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/7.jpg)
Cont…
• For example, if a and b are of type int and we assign very large values to them, a * b may not be in the acceptable range of ints, or an attempt to compute the ratio between two integers may raise a division by zero. These kinds of type errors usually cannot be detected at compiler time.
![Page 8: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/8.jpg)
Dynamic type checking• Dynamic type checking is implemented by
including type information for each data location at runtime.
• For example, a variable of type double would contain both the actual double value and some kind of tag indicating "double type".
• The execution of any operation begins by first checking these type tags. The operation is performed only if everything checks out. Otherwise, a type error occurs and usually halts execution.
![Page 9: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/9.jpg)
Cont…
• For example, when an add operation is invoked, it first examines the type tags of the two operands to ensure they are compatible.
• LISP is an example of a language that relies on dynamic type checking.
![Page 10: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/10.jpg)
Implicit type conversion
• Many compilers have built-in functionality for correcting the simplest of type errors.
• Implicit type conversion, or coercion, is when a compiler finds a type error and then changes the type of the variable to an appropriate type.
• Ada and Pascal, for example, provide almost no automatic coercions, requiring the programmer to take explicit actions to convert between various numeric types.
![Page 11: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/11.jpg)
Where type checking is needed?
• Assignments: When a variable is given a value by an assignment, it must be verified that the type of the value is the same as the declared type of the variable.
• Overloading: The same name is used for several different operations over several different types.
![Page 12: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/12.jpg)
Cont…
• Polymorphism / Generic types: Some languages allow a function to be poly-morphic or generic, that is, to be defined over a large class of similar types, e.g. over all arrays no matter what the types of the elements are.
![Page 13: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/13.jpg)
Cont…
• Data structures: A data structure may define a value with several components(e.g., a struct, tuple or record), or a value that may be of different types at different times (e.g., a union, variant or sum). To type-check such structures, the type checker must be able to represent their types.
• The type checker may need a data structure that describes complex types.
![Page 14: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/14.jpg)
Cont…
• Type conversion: A language may have operators for converting a value of one type to a value of another type, e.g. an integer to a floating point number. Some-times these operators are explicit in the program and hence easy to check.
• How-ever, many languages allow implicit conversion of integers to floats, such that, for example, 3+3.12 is well-typed with the implicit assumption that the integer 3 is converted to a float before the addition.
![Page 15: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/15.jpg)
Cont…
• Implicit types: Some languages (like Standard ML and Haskell) require pro-grams to be well-typed, but do not require explicit type declarations for variables or functions. For such to work, a type inference algorithm is used.
• A type in-reference algorithm gathers information about uses of functions and variables and uses this information to infer the types of these. If there are inconsistent uses of a variable, a type error is reported.
![Page 16: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/16.jpg)
Case Study: ML Data Type • ML, or Meta-Language, is an important functional
language developed in Edinburgh in the 1970’s. It was developed to implement a theorem prover, but recently, it has gained popularity as a general purpose language.
• ML deals with data types in a novel way. example: fun mult x = x * 10; • Requires no type information because ML infers that x is
an integer since it is being multiplied by an integer.
![Page 17: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/17.jpg)
Cont..• The only time a programmer must supply a declaration
is if ML cannot infer the types. For example, fun sqr x = x * x; • Would result in a type error because the multiplication
operator is overloaded, i.e., there exist separate multiplication operations for reals and for integers.
• so the programmer would have to clarify:
fun sqr x:int = x * x;
![Page 18: Type Checking. Type Checking? Type checking is the process of verifying that each operation executed in a program respects the type system of the language.](https://reader036.fdocuments.net/reader036/viewer/2022080905/56649d055503460f949d9059/html5/thumbnails/18.jpg)
Type Checking Declarations
Type Checking Expressions