For each interface or module, the compiler generates an object file and a link info file that contains information for the linker. The link info file names the versions stamps imported and exported by the compilation unit.
A version stamp encodes the type and value of a symbol at the time it was compiled. The Modula-3 linker ensures that the version stamps from separately compiled units are equal before linking a program.
Consider the following interface:
INTERFACE Foo; IMPORT Bar; CONST A = 4; CONST B = Bar.N + 1; END Foo.It exports two version stamps: one for the constant Foo.A, with type INTEGER and value 4, and one for the constant Foo.B, with type INTEGER and value 1 plus the value of Bar.N at the time of the complation. It also imports the version stamp of the constant Bar.N.
In general, the value of a version stamp is independent of the particular expression used to specify the symbol. For example, CONST A=2+2 yields the same version stamp as CONST A=4 or CONST X=3; A=X+1.
Version stamps are produced for each exported symbol in an interface (ie. each type, exception, variable, and procedure). Modules import the version stamps of the symbols that they import.
In -make mode, the compiler only recompiles a source module if its object is missing or if any of its imported version stamps is no longer exported.
Last modified on Thu Jan 4 11:09:09 PST 1996 by heydon modified on Thu Apr 21 11:44:17 PDT 1994 by kalsow modified on Fri Feb 7 00:38:19 PST 1992 by mullerCopyright (C) 1992, 1996, Digital Equipment Corporation. All rights reserved.