From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.5-pre1 Date: 28 Jan 93 15:58:29 GMT From: progers@ajpo.sei.cmu.edu (Pat Rogers) Subject: Re: private types and recompilation Message-ID: <1993Jan28.105829.5919@sei.cmu.edu> List-Id: In article <9301271722.aa25516@Paris.ics.uci.edu> kanderso@mabillon.ICS.UCI.EDU (Kenneth Anderson) writes: >In comp.lang.ada you write: > >>When Ada 83 was designed, why did the designers choose to put >>the details of private types in package specifications, rather than >>in package bodies (which is more in the spirit of information hiding, and >>better supports independent compilation). > >I'm not sure, but I think because the compiler needs to know the size >of the types so that it can allocate space for parameters in the >subprograms that are defined in the spec. > > Well, not really that, so much as that objects of the private type can be allocated by users of the package before the package body is ever compiled. So the compiler must have sufficient info from the package spec. Incomplete type definitions might help you (sometimes called the "Deferred Implementation Scheme"): package P is type Exported is private; ... operations on the type Exported ... private type Implementation; -- incomplete type def type Exported is access Implementation; end P; package body P is type Implementation is ... end P; Note however that the language doesn't always force a recompilation, say, when a comment is added, or a private part is altered. It depends upon what was changed, but some implementations are "smart" about it. Pat