From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,INVALID_DATE autolearn=no autolearn_force=no version=3.4.4 Path: utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!bbn!inmet!ishmael!inmet!stt From: stt@inmet Newsgroups: comp.lang.ada Subject: Re: limited private types Message-ID: <124000023@inmet> Date: 6 Dec 88 20:09:00 GMT References: <8197@nsc.nsc.com> Nf-ID: #R:nsc.nsc.com:-819700:inmet:124000023:000:1813 Nf-From: inmet!stt Dec 6 15:09:00 1988 List-Id: All Ada compilers already deal with "stack" objects of size unknown at compile time (e.g. x : string(1..f(y));). Some compilers do this more efficiently than others, but the big advantage is that the compiler takes care of freeing the associated storage when the object goes away. When access types are used, it is always a challenge to figure out how to ensure that the storage gets efficiently reclaimed. (This is one of the big reasons why I believe user-defined "finalization" should be added into the language.) Nevertheless, access types with a deferred incomplete designated type are still used in complex systems, because they break recompilation dependencies. It seems like allowing the deferral of any private type to a package body would be little or no additional burden on compiler writers, and would provide the same nice break in recompilation dependency when used. For non-discriminated types, the size would be an elaboration-time constant. For discriminated types, the size would be determined by a function call (many compilers already create size functions to save code space for complex variant record size calculations). However, it would be appropriate to require that the full definition of the private type be a record type, so that pass-by-reference semantics would be allowed. The syntax for such a deferred private record type might be: . . . private type Priv is record; . . . I fully agree with the importance of pass-by-value semantics for all scalars/access-values. It is easy enough to wrap a scalar into a record if pass-by-reference semantics are preferred for some particular application. The improved speed possibilities for pass-by-value scalars far outweigh any abstraction disadvantage. S. Tucker Taft Intermetrics, Inc. Cambridge, MA 02138