Glossary of terms used in the Grand Book
Notice: when a term has several different meanings, priority is given to the term's meaning in the context we are interested in, that of Eiffel computing and object-oriented programming of objects using design by contract.
attribute: an attribute of an object is part of the memorized information of that object. In other words, using the attribute of some object does not involve computation. An attribute is either constant or variable. When not constant, attribute means exactly the same as instance variable.
anchored type: a type defined relative to another type. Anchored types are those which use the keyword like.
back-end: the last part of a compiler which, after each class has been analyzed and no error has been detected, builds the executable that runs all the operations described in the source program.
contravariance: as opposed to covariance; we say that a language applies the contravariance rule if, when a method is redefined, the argument types or the result type can be replaced by a more general type. Eiffel does not apply the contravariance rule. Eiffel applies the covariance rule.
compiler: a program that can verify and then translate another program written in a computing language. Before doing the translation, the compiler checks that the program to be translated conforms to the syntax and rules of the language.
covariance: as opposed to contravariance; we say that a language applies the covariance rule if, when an inherited method is redefined, the argument types or the result type can be replaced by a more specific type. For example, if the class APPLE inherits from FRUIT, the arguments (or the result) of the redefined methods can pass from FRUIT to APPLE. This type change is valid according to the covariance rule. So the scope for redefinition varies in the same direction as the inheritance relationship, hence the name covariance. Eiffel applies the covariance rule because that rule corresponds to the most useful way of using inheritance.
design pattern: Solution or computing framework for a known problem. The Gang of Four's catalogue of design patterns [GoF 1995] contains their version for Eiffel [JMT 1999]. See also the classes ITERATOR and VISITOR.
dynamic dispatch: runtime selection of the method best adapted to the dynamic type of the object to which the operation is applied. Dynamic dispatch is an essential feature of object-oriented programming. For more details, refer to the detailed description of dynamic dispatch.
dynamic type: at runtime, the exact type of the object designated by an expression or by a variable. See also static type.
expression: as opposed to instruction, an expression produces a return value. For example, an expression can be used on the right-hand side of an assignment. The constant True is an expression. The constant 5 is also an expression. The calculation i+1 is one too. Without being too dogmatic about it, good programming habits lead us not to allow side effects during the evaluation of expressions. See also the syntax diagram for an expression.
function: a function is a set of instructions that performs a certain task. With the exception of Current, a function takes zero or several parameters and always returns a result. A function in computer science (and so in Eiffel) distinguishes itself from the mathematical function mainly by the fact that as well as calculating a result from its parameters, the Eiffel function can also have side effects. See also procedure.
heap: area in the memory where objects are stored.
instance: synonym of object. An object or an instance of some class.
instance variable: one memory field of some object. As indicated, this memory field can be accessed either for reading or for writing. The preferred Eiffel terminology is writable attribute.
instruction: in contrast to an expression, an instruction does not produce a return value. In order to do anything useful, an instruction has to produce a lasting side effect. See also the syntax diagram for an instruction.
language: a computer language and a language used for interacting with or between computers. A programming language is a computer language. [Did I misunderstand the French? This doesn't seem to say anything useful.] Eiffel is a programming language. One should not confuse language with a compiler for that language.
late binding: see dynamic dispatch.
library: a software library is a collection of classes intended to facilitate a particular task or to provide objects of general usefulness. The library provided with Liberty Eiffel is very extensive and supplies all the usual primitive objects (INTEGER, CHARACTER, STRING, REAL, etc.), all the usual data structures (COLLECTION, SET, DICTIONARY, QUEUE, STACK, etc.) along with many other classes.
live type: this phrase is used throughout the Liberty Eiffel documentation to refer to a type that is actually used in the program and which has C code generated for it. The phrase is a literal translation from French; a better expression in English might be Instantiated type.
local variable: refers to a variable allocated on the stack during the execution of a routine. In Eiffel, local variables, like other variables, are automatically initialised to default values. See also the keyword local in the routine definition of the syntax diagrams.
procedure: a procedure is a set of instructions that performs a certain task. With the exception of Current, which takes no parameters, a procedure takes zero or several parameters and returns no result. See also function.
side-effect: applies to a routine which permanently modifies the environment in which it is called. For example: changing objects visible to the calling environment, writing to the screen, emitting a sound, or writing to a printer or a file.
stack: a data structure used on a first in, first out (FIFO) basis. In executing a program, a stack is used to store successive routine calls while they are current. In fact, the stack contains the memory addresses that allow the program to return to the calling context at the end of each routine's execution. The stack is also used to allocate the memory associated with local variables. Note that memory management in the stack is very efficient. In particular, the time taken to allocate space for local variables, even if there are many, is almost negligible. (See also the heap).
static type: an expression's declaration type. In contrast to dynamic type, no runtime information is taken into account in determining the static type of an object. An expression's static type does not depend on the exact nature of the object designated by the expression. The static type of Current is that of the surrounding class. See also dynamic type.