lmdk (10/28/82)
#R:floyd:-69800:whuxlb:4100001:000:2733 whuxlb!lmdk Oct 28 14:13:00 1982 Re: What's the difference in the semantics of the following declarations: type A is float; type A is new float; subtype A is float; subtype A is new float; Are they even all legal syntactically? **************************** The first and fourth declarations are not valid. REASONS : ===> Type declarations in ADA have the following form TYPE identifier [discriminant_part] IS type_definition The first declaration above has a type_name (following the keyword IS) and not a type_definition. For the various allowable formats of a type_definition (since there are so many) I recommend that you consult the ADA Reference Manual. ===> Subtype declarations in ADA have the following form : SUBTYPE identifier IS type_name [constraint] The fourth declaration has a derived_type_definition (following the keyword IS) and not a type_name. Furthermore, derived_type_definitions (in this case NEW FLOAT) are only used in type declarations and not in subtype declarations. THE difference in semantics between the second and third declarations is very subtle. Both declarations declare a type called A. This type A in both declarations has the same value set and operators as float. However, objects declared as of type A based on the second declaration of A will be considered as logically distinct from objects of type float. This is not true with the third declaration. FURTHER CLARIFICATION Consider the following object declarations : Q : float; -- Q is of type float P : A; -- P is of type A If type A was declared using the second declaration then the following statement is not valid : P := Q; This is because P and Q are considered to be of different types. One could get around this by using the type conversion feature of ADA : P := A(Q); If on the other hand, type A was declared using the third declaration then the statement P := Q; is acceptable. SUMMARY The second declaration declares a type A that is distinct from the type float but has the same value set and operators as that of float. The third declaration declares a type A that is not distinct from the type float and has the same value set and operators as that of float. So, in effect the third declaration merely provides another name for the type float. Deepak Kohli ...!harpo!whuxlb!lmdk