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-Language: ENGLISH,CP1252 X-Google-Thread: 103376,fba93c19bb4e7dbd X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2003-07-21 11:51:35 PST Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!logbridge.uoregon.edu!arclight.uoregon.edu!wn13feed!wn12feed!worldnet.att.net!204.127.198.203!attbi_feed3!attbi_feed4!attbi.com!sccrnsc03.POSTED!not-for-mail Message-ID: <3F1C360E.8010208@attbi.com> From: "Robert I. Eachus" User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.2) Gecko/20021120 Netscape/7.01 X-Accept-Language: en-us, en MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: Q: Endless loop by dispatching References: <3F188FDA.3000202@attbi.com> <3F18DB9D.5020205@attbi.com> <818nhv0hrmlheu622t82574blao7bqr0tt@4ax.com> <3F1BBB9B.2070800@attbi.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit NNTP-Posting-Host: 66.31.71.243 X-Complaints-To: abuse@comcast.net X-Trace: sccrnsc03 1058813474 66.31.71.243 (Mon, 21 Jul 2003 18:51:14 GMT) NNTP-Posting-Date: Mon, 21 Jul 2003 18:51:14 GMT Organization: Comcast Online Date: Mon, 21 Jul 2003 18:51:34 GMT Xref: archiver1.google.com comp.lang.ada:40574 Date: 2003-07-21T18:51:34+00:00 List-Id: Dmitry A. Kazakov wrote: > Another evil is that constructors/destructors are exposed as "normal" > operations having some special semantincs attached to them *depending* > on the context. This also won't work. The word "Initialize" suddenly > becomes some very special for the compiler in the private part, being > just a name in the public one. If it were just a procedure Foo, one > could probably live with it. Initialize (and for that matter Ada.Finalization) is just a convenient scapegoat to use in examples. The problems can occur with any predefined operations of a tagged type. (But there is this one package in the RM that declares tagged types which is why it tends to get used in examples.) > IMO it should be illegal with any pragma: > > package A is > type Public is tagged private; > procedure Initialize(X: in out Public); > private > type Public is new Ada.Finalization.Controlled with... > -- Error public and private views are incompatible! > end A; > > It could be made legal only if primitive operation disallowing were > supported: That is an interesting approach. I can't see justifying disallowing it entirely, but saying that: not overriding procedure Initialize(X: in out Public); -- or whatever syntax is chosen becomes illegal in the private part might be a good idea. At least it prevents the misleading use of the keywords. If we still have "may override" and add my "will override" then the programmer gets to choose what to say publicly, which is nice, and still get the advantage of the compiler checking his assertions. > A more interesting case: > > package AA is > type Public is tagged private; > private > type Public is new Ada.Finalization.Controlled with... > end AA; > > with AA; use AA; > package B is > type Public_Public is new Public with private; > procedure Initialize(X: in out Public_Public); > -- This is legal. B knows nothing about Public's origin > -- so it cannot misuse it > private > type Public_Public is new Public with ... > end B > > package AA.C is > type Private_Public is new Public with private; > procedure Initialize(X: in out Public_Public); > -- This is an error. C knows Public's private, so > -- its private part is illegal > private > type Private_Public is new Public with ... > end AA.C Change Private_Public to new Public_Public with private and you will begin to understand the problem. AA.C.Initialize would override B.Initialize everywhere, but would only override AA.Initalize, assuming that there is one, in some areas of its scope. -- Robert I. Eachus �In an ally, considerations of house, clan, planet, race are insignificant beside two prime questions, which are: 1. Can he shoot? 2. Will he aim at your enemy?� -- from the Laiden novels by Sharon Lee and Steve Miller.