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: a07f3367d7,146d9a693430fff2 X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,CP1252 Path: g2news1.google.com!postnews.google.com!s17g2000yqs.googlegroups.com!not-for-mail From: Martin Newsgroups: comp.lang.ada Subject: Re: Ada2012 Invariants and obaque types Date: Tue, 21 Jun 2011 03:36:48 -0700 (PDT) Organization: http://groups.google.com Message-ID: References: <239a78ad-0937-4a7a-8163-231430fd5ffe@k27g2000yqn.googlegroups.com> NNTP-Posting-Host: 20.133.0.8 Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-Trace: posting.google.com 1308652608 3655 127.0.0.1 (21 Jun 2011 10:36:48 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Tue, 21 Jun 2011 10:36:48 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: s17g2000yqs.googlegroups.com; posting-host=20.133.0.8; posting-account=g4n69woAAACHKbpceNrvOhHWViIbdQ9G User-Agent: G2/1.0 X-Google-Web-Client: true X-Google-Header-Order: HUALESRCNK X-HTTP-UserAgent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0,gzip(gfe) Xref: g2news1.google.com comp.lang.ada:19970 Date: 2011-06-21T03:36:48-07:00 List-Id: On Jun 21, 11:27=A0am, Yannick Duch=EAne (Hibou57) wrote: > Hi Martin, > > Unless I've missed something, I do not see the point. Whether or not you = =A0 > use an invariant, if the public view assert the type is tagged, the full = =A0 > view must be tagged. This was the same, even prior to Ada 2012. Otherwise= , =A0 > how would you derive from a tagged public view and define class wide view= , =A0 > =A0from a type whose private view isn't tagged ? > > Just out of curiosity: which GNAT flavor do you use for Ada 2012 ? > > Le Tue, 21 Jun 2011 10:53:31 +0200, Martin = =A0 > a =E9crit: > > > > > > > > > > > A fairly common Ada idiom is to define the full view of a private type > > using an incomplete declaration. Thus leaving the actual > > implementation to the package spec. Trying this out with the public > > view defined with an invariant lead to a compiler error - is this: > > > a) expected? > > b) an unexpected consequence? or > > c) a compiler bug? > > > Example: > > package P1 is > > =A0 =A0type T1 is tagged private > > =A0 =A0 =A0 with Invariant =3D> Is_Valid (T1); > > =A0 =A0function Create =A0 =A0 =A0 =A0 =A0 =A0 =A0 return T1; > > =A0 =A0function Is_Valid (This : T1) return Boolean; > > private > > =A0 =A0type Imp; > > =A0 =A0type T1 is > > =A0 =A0 =A0 record > > =A0 =A0 =A0 =A0 =A0I : Imp; > > =A0 =A0 =A0 end record; > > end P1; > > > gnatmake -ws -c -u -PH:\Ada\test_invariants\test_invariants.gpr p1.ads > > gcc -c -g -g -gnatE -gnatVn -gnato -fstack-check -gnat12 -gnatf -I- - > > gnatA H:\Ada\test_invariants\src\p1.ads > > p1.ads:11:04: type "Imp" is frozen at line 3 before its full > > declaration > > p1.ads:13:09: full declaration of private type "T1" defined at line 3 > > must be a tagged type > > p1.ads:15:14: invalid use of type before its full declaration > > gnatmake: "H:\Ada\test_invariants\src\p1.ads" compilation error > > > [2011-06-21 09:46:55] process exited with status 4 (elapsed time: > > 00.26s) > > -- > =93Syntactic sugar causes cancer of the semi-colons.=94 =A0[Epigrams on = =A0 > Programming =97 Alan J. =97 P. Yale University] > =93Structured Programming supports the law of the excluded muddle.=94 [Id= em] > Java: Write once, Never revisit Sorry - the pearls of doing a 'quick' demo... Replace "type T1 is" with " type T1 is tagged" and you still get: > > p1.ads:11:04: type "Imp" is frozen at line 3 before its full > > declaration > > p1.ads:15:14: invalid use of type before its full declaration > > gnatmake: "H:\Ada\test_invariants\src\p1.ads" compilation error Which is the really what I'm asking about... -- Martin