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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,bd40601768eaf8fd X-Google-Attributes: gid103376,public From: Richard D Riehle Subject: Re: 'constant functions' and access constant params (was Re: Array of Variant Records Question...) Date: 1999/09/27 Message-ID: <7so9vb$59b@dfw-ixnews19.ix.netcom.com>#1/1 X-Deja-AN: 529945094 References: <7r5vh3$imu1@svlss.lmms.lmco.com> <37d6a45c@news1.prserv.net> <37d6ccb6@news1.prserv.net> <7r77i8$i08$1@nnrp1.deja.com> <37d7c116@news1.prserv.net> <7r8t21$ov5$1@nnrp1.deja.com> <37d822a1@news1.prserv.net> <7reg02$t83@dfw-ixnews6.ix.netcom.com> <37DE8D09.C863CBC9@rational.com> <7roohh$s6r@dfw-ixnews7.ix.netcom.com> <37e01168@news1.prserv.net> <7rp86o$c6h@dfw-ixnews3.ix.netcom.com> <37E18CC6.C8D431B@rational.com> <7rs8bn$s6@dfw-ixnews4.ix.netcom.com> <37e2e58c@news1.prserv.net> <7s9nd0$cbe@dfw-ixnews17.ix.netcom.com> <37e8e067@news1.prserv.net> <7sas3p$bfa@dfw-ixnews3.ix.netcom.com> <37e994c0@news1.prserv.net> Organization: Netcom X-NETCOM-Date: Mon Sep 27 12:36:43 PM CDT 1999 X-Inktomi-Trace: sji-ca-cache 938453785 22139 209.109.232.38 (27 Sep 1999 17:36:25 GMT) Newsgroups: comp.lang.ada Date: 1999-09-27T12:36:43-05:00 List-Id: In article <37e994c0@news1.prserv.net>, "Matthew Heaney" wrote: >For private types, the supplier is (or should be) free to make internal >modifications, to the extent that the postcondition is satisfied. This is >where we disagree. We agree, then, that a designer should be allowed to design a contract that declares (X : access constant T) as a mode for a non-private type. Interesting that we both came to this notion independently and found ourselves arguing about it. I have, before this little discussion, encountered others in the Ada community who have also come to this idea on their own. >Agree for non-private data. Disagree for private data. Now we are focusing on the precise area of disagreement. Once again, we are not so far apart. If we are to agree that the syntax, function F(X : access constant T) return R; or something like it (I am not as concerned with the syntax as the semantics), then it would make sense to extend that capability to all types, private and non-private. The designer has the ability to overload an operation with a new primitive, though not ability to override it. This does introduce a complication in the overloading rules that requires a compiler to check one additional mode level of the parameter profile. However, that is true with both private and non-private types. In my earlier example, repeated below, >> package Abstract_Level is >> type Abstract_Declaration is abstract tagged private; >> procedure X ( . . .) is abstract; >> procedure Y ( . . .) is abstract; >> function F (A : access constant Abstract_Declaration) return some-type >> is abstract; >> private >> type Abstract_Declaration is abstract tagged private; >> end Abstract_Level; The class designer is explicitly declaring that overriding of the function F prohibits modification of the data components of Abstract_Declaration. If it becomes useful to introduce a new function later with different properties, no problem. Returning to the syntax issue for a moment, I am still not convinced that, in the absence of explicit pre-, post-, and invariant conditions, having the ability to declare a function as constant would not be a useful feature. In this case, the constant function would behave just like a protected function. Although you, along with many others, do not like this syntax, constant function F ( ... ) return ... it would serve the purpose nicely. Such functions would be only useful as queries on the state of data. I realize that this notion foments another storm of protest and indignation. Richard Riehle richard@adaworks.com http://www.adaworks.com