11 ;;Quote: a Modula-3 program is a computation on locations of digital components
|
11+;;Quote: a variable is a set of locations that represent a mathematical value according to a convention determined by the variable's type; v is a member of T, and T contains v
|
11+;;Quote: an identifier is a symbol or name for a variable, type, procedure, etc. within the scope of its declaration
|
12 ;;Quote: an expression specifies a computation that produces a value or variable; constant if determined at compile-time
|
12+;;Quote: a designator is an expression that denotes a variable or a variable's value; either readonly or writable
|
12 ;;Quote: errors may be reported at compile time or run time; unchecked errors may only occur in unsafe modules
|
12 ;;Quote: Modula-3 uses structural equivalence for data types even though Modula-2 used name equivalence
|
12+;;Quote: two types are structurally equivalent if their definitions are the same when expanded; i.e., constant expressions replaced by their values, type names replaced by their definitions; infinite if recursive
|
12+;;Quote: with structural equivalence, allow a type expression wherever a type is required
|
13 ;;Quote: in Modula-3, every expression has a unique type
|
13+;;Quote: values may be members of many types, but Modula-3 objects and traced reference values have an allocated type that is tested by TYPECASE
|
14 ;;Quote: a Modula-3 array consists of elements of the same size and type, and an index by values of an ordinal type
|
14 ;;Quote: Modula-3 has fixed and open arrays; the size of an open array is determined when allocated or bound
|
14+;;Quote: an open array is only used for formal parameters, the referent of a reference type, the element type of another open array, or the type of a literal array
|
14 ;;Quote: arrays are assignable if they have the same element type and shape; an open array requires a runtime shape check
|
14+;;Quote: arrays may be assigned to arrays of different index types or to overlapping subarrays
|
16 ;;Quote: a record is a list of field declarations that define a name, a type, and a default value; either the type or default may be omitted
|
16 ;;Quote: a packed type defines the bit length of a value, without gaps between fields; an implementation may disallow any length
|
16+;;Quote: a Modula-3 set is represented by a packed bit array
|
18 ;;Quote: a reference type may be branded with a unique text constant; useful for subtyping and persistent data storage
|
18 ;;Quote: use TYPECASE to test the referent type of any traced object
|
21 ;;Quote: an object is a data record of fields and a method suite of procedures that accept the object as a first argument
|
21+;;Quote: an object type determines a prefix of the data record and method suite; subtypes may define additional fields and methods
|
21 ;;Quote: a field or method in a subtype masks any field or method with the same name in the supertype; use NARROW to access the supertype
|
21 ;;Quote: Modula-3 objects are assigned by reference; to copy an object, copy its fields
|
21+;;Quote: an object can not be dereferenced because the static type of an object does not determine the type of its data record
|
24 ;;Quote: Modula-3 uses a simple, restricted subtype rule, if T <: U, then every value of T is a value of U; arrays and procedures must be basically the same
|
26 ;;Quote: an implementation of Modula-3 exceptions should not increase the cost of procedure calls; the specification suggests a minimum ratio of a 1000 to 1
|
26 ;;Quote: type T is assignable to type U if it is a subtype, an array supertype, a reference supertype, or an overlapping ordinal type
|
26+;;Quote: an expression is assignable to a variable if their types are assignable, the value is valid, not a local procedure, nor an array of a different shape
|
30 ;;Quote: Modula-3 handles exceptions with TRY-EXCEPT-ELSE; an exception may return a value
|
31 ;;Quote: TRY S_1 FINALLY S_2 executes S_2 even if S_1 throws an exception
|
39 ;;Quote: a subtype declaration is opaque; a REVEAL clause introduces information about an opaque type into a scope
|
47 ;;Quote: a safe module includes no unsafe interfaces or operations such as unchecked type transfer, address arithmetic, dispose object, and untraced allocations
|