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,556e5b18154df788 X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,ASCII-7-bit X-Received: by 10.180.75.82 with SMTP id a18mr1265649wiw.0.1365341477414; Sun, 07 Apr 2013 06:31:17 -0700 (PDT) MIME-Version: 1.0 Path: p18ni42846wiv.0!nntp.google.com!feeder1.cambriumusenet.nl!82.197.223.108.MISMATCH!feeder2.cambriumusenet.nl!feeder3.cambriumusenet.nl!feed.tweaknews.nl!193.141.40.65.MISMATCH!npeer.de.kpn-eurorings.net!npeer-ng0.de.kpn-eurorings.net!news.n-ix.net!news.bawue.net!news1.tnib.de!feed.news.tnib.de!news.tnib.de!weretis.net!feeder4.news.weretis.net!nuzba.szn.dk!news.jacob-sparre.dk!munin.jacob-sparre.dk!pnx.dk!.POSTED!not-for-mail From: "Randy Brukardt" Newsgroups: comp.lang.ada Subject: Re: Interresting, possibly buggy behavior in GNAT generics w/ expression function. Date: Mon, 1 Apr 2013 19:52:10 -0500 Organization: Jacob Sparre Andersen Research & Innovation Message-ID: References: <1k6ipbtagwzw4$.1dv47rfygcedg.dlg@40tude.net> <1ex3dm2hk2j54$.1uiyljwziv0hi$.dlg@40tude.net> <1ilubaaaex6jp$.zd9lslst85nn.dlg@40tude.net> NNTP-Posting-Host: static-69-95-181-76.mad.choiceone.net X-Trace: munin.nbi.dk 1364863932 11767 69.95.181.76 (2 Apr 2013 00:52:12 GMT) X-Complaints-To: news@jacob-sparre.dk NNTP-Posting-Date: Tue, 2 Apr 2013 00:52:12 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.5931 X-RFC2646: Format=Flowed; Original X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 Date: 2013-04-01T19:52:10-05:00 List-Id: "Dmitry A. Kazakov" wrote in message news:1ilubaaaex6jp$.zd9lslst85nn.dlg@40tude.net... > On Fri, 29 Mar 2013 19:56:05 -0500, Randy Brukardt wrote: > >> "Dmitry A. Kazakov" wrote in message >> news:1ex3dm2hk2j54$.1uiyljwziv0hi$.dlg@40tude.net... >> ... >>>> But, do you think it should have failed at instantiation? >>> >>> It should fail to compile, instantiation time is too late. Generic >>> contracts are much too weak. >> >> This doesn't make much sense, as you then go on to suggest adding a >> formal >> contract which would have the effect of rejecting an instantiation if the >> type actually had Foo. That's exactly what Ada does, so I don't see any >> advantage of a complication. > > That is because you consider only one possibility, that is a client-side > error. Then instantiation is the right time to report this contract > violation. For the generic package itself this time is when the generic is > compiled. > > My example had the purpose to show that matching formal parameters is not > enough. It could illustrate an error in the generic itself as well, e.g. > when *all* intended actual types for instantiations of P have Foo per > design. True. But I don't think it is possible to unambiguously tell which side of the contract is wrong, in general. You have the same problem with a subprogram profile: it's possible that the error is that the subprogram is wrong for its intended use, or that the clients are using it wrong. >> The problem you are having is that you are viewing the contract of a >> generic >> in too narrow of a fashion. The contract includes not only the things in >> the >> generic part, but also a number of properties expressed in the rest of >> the >> specification. > > You lumped together two different contracts. There is a contract on the > actual parameters which is defined by be the formal parameters > specification. Another contract is the generic package specification > (public part), which is a contract for the clients using an instance of > the > package. No I didn't - I'm only talking about the contract of a generic unit. The case in question is the meaning of "not overriding" in a generic speecification. Uses of overriding indicators in a generic specification is part of the contract of the generic, as are various other things (like accessibility checks - it's easy to write a generic that can only be instantiated at library level). The contract of a generic also includes the things in generic formal part (between "generic" and "package"). None of this has anything to do with parameters - I don't know what gave you that idea. Randy.