@Part(predef, Root="ada.mss") @Comment{$Date: 2005/01/29 07:15:05 $} @LabeledNormativeAnnex{Predefined Language Environment} @comment{$Source: e:\\cvsroot/ARM/Source/pre.mss,v $} @comment{$Revision: 1.23 $} @comment{$RLB: Eliminated includes. $} @begin{Intro} @Leading@keepnext @redundant[@Defn{Language-Defined Library Units} @Defn{predefined environment} This Annex contains the specifications of library units that shall be provided by every implementation. There are three root library units: Ada, Interfaces, and System; other library units are children of these:] @Leading@Keepnext @ChgRef{Version=(1),Kind=(Revised),Ref=(8652/0047),ARef=(AI95-00081-01)} @ @*@ @;@comment{paragraph number here, paragraph numbers seem to intrude on the RHS column, misaligning it. Thus we have two lines, as small as possible.} @begin{Display} @TabClear{}@TabSet{L2, L4, L6, L8, L10, L12, L14, L16} @begin{TwoCol} @Noparanum@redundant[@shrink @NewColumn @Noparanum@shrink @Noparanum@shrink<@\Interfaces @em @RefSecNum{The Package Interfaces} @\@\C @em @RefSecNum{Interfacing with C} @\@\@\Pointers @em @RefSecNum{The Generic Package Interfaces.C.Pointers} @\@\@\Strings @em @RefSecNum{The Package Interfaces.C.Strings} @\@\COBOL @em @RefSecNum{Interfacing with COBOL} @\@\Fortran @em @RefSecNum{Interfacing with Fortran}> @Noparanum@shrink<@\System @em @RefSecNum{The Package System} @\@\Address_To_Access_Conversions @em @RefSecNum{The Package System.Address_To_Access_Conversions} @\@\Machine_Code @em @RefSecNum{Machine Code Insertions} @\@\RPC @em @RefSecNum{Partition Communication Subsystem} @\@\Storage_Elements @em @RefSecNum{The Package System.Storage_Elements} @\@\Storage_Pools @em @RefSecNum{Storage Management}>] @end{TwoCol} @end{Display} @begin{Discussion} In running text, we generally leave out the @lquotes@;Ada.@rquotes@; when referring to a child of Ada. @end{Discussion} @begin{Reason} We had no strict rule for which of Ada, Interfaces, or System should be the parent of a given library unit. However, we have tried to place as many things as possible under Ada, except that interfacing is a separate category, and we have tried to place library units whose use is highly non-portable under System. @end{Reason} @end{Intro} @begin{ImplReq} The implementation shall ensure that each language defined subprogram is reentrant@Chg{Version=[2],New=[@Defn{reentrant}],Old=[]}@ChgNote{Suggested by Gary Dismukes} in the sense that concurrent calls on the same subprogram perform as specified, so long as all parameters that could be passed by reference denote nonoverlapping objects. @begin{Ramification} For example, simultaneous calls to Text_IO.Put will work properly, so long as they are going to two different files. On the other hand, simultaneous output to the same file constitutes erroneous use of shared variables. @end{Ramification} @begin{Honest} Here, @lquotes@;language defined subprogram@rquotes@; means a language defined library subprogram, a subprogram declared in the visible part of a language defined library package, an instance of a language defined generic library subprogram, or a subprogram declared in the visible part of an instance of a language defined generic library package. @end{Honest} @begin{Ramification} The rule implies that any data local to the private part or body of the package has to be somehow protected against simultaneous access. @end{Ramification} @end{ImplReq} @begin{ImplPerm} The implementation may restrict the replacement of language-defined compilation units. The implementation may restrict children of language-defined library units (other than Standard). @begin{Ramification} For example, the implementation may say, @lquotes@;you cannot compile a library unit called System@rquotes@; or @lquotes@;you cannot compile a child of package System@rquotes@; or @lquotes@;if you compile a library unit called System, it has to be a package, and it has to contain at least the following declarations: ...@rquotes@;. @end{Ramification} @end{ImplPerm} @begin{DiffWord83} Many of Ada 83's language-defined library units are now children of Ada or System. For upward compatibility, these are renamed as root library units (see @RefSecNum{Renamings of Ada 83 Library Units}). The order and lettering of the annexes has been changed. @end{DiffWord83} @begin{DiffWord95} @ChgRef{Version=[2],Kind=[AddedNormal],Ref=[8652/0047],ARef=[AI95-00081-01]} @ChgAdded{Version=[2],Text=[@b Units missing from the list of predefined units were added.]} @end{DiffWord95}