on implementing separate compilation in block-structured languages
Perhaps the single most important paradigm of modern programming language design is block structure. Block-structured languages are characterized by nested definitional units (ALGOL blocks, PASCAL procedures, Euclid modules) having rather specialized scoping rules. In particular, access to entities defined in containing units is allowed (although sometimes with restrictions) while access to entities defined within a unit from outside it is severely restricted or totally forbidden. This method of programming language structuring supports a top-down program development methodology: the body of a definition unit can be developed (or modified) without affecting other units (since its internal details are hidden from the outside). Such units (most notably procedures) become the natural units of program development and modification.
separate compilation blocking structure language programming language design definition procedure module rules access method developer methodology intern