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=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,5c89acd494ea9116 X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news4.google.com!feeder1-2.proxad.net!proxad.net!feeder2-2.proxad.net!newsfeed.arcor.de!newsspool1.arcor-online.net!news.arcor.de.POSTED!not-for-mail Newsgroups: comp.lang.ada Subject: Re: Self pointer in limited record From: Georg Bauhaus In-Reply-To: <1rio4ocsymy4p$.5u8nabi3tmoq$.dlg@40tude.net> References: <1183577468.034566.57830@n60g2000hse.googlegroups.com> <46d968ee$0$30368$9b4e6d93@newsspool4.arcor-online.net> <137iu0lr82dtb$.wqy3zjz2vr9q.dlg@40tude.net> <46d972e8$0$30384$9b4e6d93@newsspool4.arcor-online.net> <1alyfwaig93sk$.99oy269uon$.dlg@40tude.net> <46d9c138$0$4531$9b4e6d93@newsspool3.arcor-online.net> <1rt8kdcrj6tf.1qgvycc6vh357$.dlg@40tude.net> <46db2bf4$0$7699$9b4e6d93@newsspool2.arcor-online.net> <1188816674.2630.25.camel@kartoffel.vocalweb.de> <9cdmw7k85sey.85sb2t1bjefy$.dlg@40tude.net> <1mbajw59c3eir.jyl8bdp6qvj8.dlg@40tude.net> <1188850449.2630.60.camel@kartoffel.vocalweb.de> <1aza6nzawgcnm.sf76q4dvzw4n$.dlg@40tude.net> <46de8897$0$16115$9b4e6d93@newsspool1.arcor-online.net> <15hzyyy3soem0.12hn79bwy27zt$.dlg@40tude.net> <1189017071.2630.246.camel@kartoffel.vocalweb.de> <46df20aa$0$30370$9b4e6d93@newsspool4.arcor-online.net> <1rio4ocsymy4p$.5u8nabi3tmoq$.dlg@40tude.net> Content-Type: text/plain Content-Transfer-Encoding: 7bit Message-Id: <1189074405.2630.257.camel@kartoffel.vocalweb.de> Mime-Version: 1.0 X-Mailer: Evolution 2.10.1 Date: Thu, 06 Sep 2007 12:26:45 +0200 Organization: Arcor NNTP-Posting-Date: 06 Sep 2007 12:26:00 CEST NNTP-Posting-Host: 635902ec.newsspool4.arcor-online.net X-Trace: DXC=Skk4\PeZMD9lIh70@N[Wb<^57 X-Complaints-To: usenet-abuse@arcor.de Xref: g2news2.google.com comp.lang.ada:1785 Date: 2007-09-06T12:26:00+02:00 List-Id: On Thu, 2007-09-06 at 09:37 +0200, Dmitry A. Kazakov wrote: > On Wed, 05 Sep 2007 23:38:34 +0200, Georg Bauhaus wrote: > > > They can avoid surprises and nasty issues because they enforce body > > visibility of data objects. Example: > > > > > > > > package S is > > type T is limited private; > > procedure op(x: in out T); > > private > > type T is limited record > > null; > > end record; > > end S; > > This is IMO bad design, it should be: > > package S is -- Stateless > type T is limited private; > ... > end S; IIUC, this will still allow referencing S.T elsewhere. And even when S has only subprograms, they are visible to other parts of the program. But S was intended to be used by some procedure, and only by the procedure. > package Data is -- Stateful > ... -- Operations having an instance of T as a hidden parameter > end Data; > > with S; > package body Data is > Singleton : S.T; > ... > end Data; > > There is no need to "with" S for anybody else, Do you think that "No need to with S" will convince programmers to not touch it? When I need to make sure that S is not going to be used elsewhere, it needs to be hidden. What are the options? Either build some fairly complicated hierarchy with visibility in private parts or simply declare S where it is needed: in the declarative part of the enclosing subprogram.