A Stand-alone Library (abbreviated “SAL”) is a library that contains the necessary code to elaborate the Ada units that are included in the library. In contrast with an ordinary library, which consists of all sources, objects and ALI files of the library, a SAL may specify a restricted subset of compilation units to serve as a library interface. In this case, the fully self-sufficient set of files will normally consist of an objects archive, the sources of interface units' specs, and the ALI files of interface units. If an interface spec contains a generic unit or an inlined subprogram, the body's source must also be provided; if the units that must be provided in the source form depend on other units, the source and ALI files of those must also be provided.
The main purpose of a SAL is to minimize the recompilation overhead of client
applications when a new version of the library is installed. Specifically,
if the interface sources have not changed, client applications do not need to
be recompiled. If, furthermore, a SAL is provided in the shared form and its
version, controlled by
Library_Version attribute, is not changed,
then the clients do not need to be relinked.
SALs also allow the library providers to minimize the amount of library source text exposed to the clients. Such “information hiding” might be useful or necessary for various reasons.
Stand-alone libraries are also well suited to be used in an executable whose main routine is not written in Ada.