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,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: Victor Porton Newsgroups: comp.lang.ada Subject: Re: Logical constants Date: Mon, 02 Oct 2017 22:07:11 +0300 Organization: Aioe.org NNTP Server Message-ID: References: NNTP-Posting-Host: 9OC/PY8QRnnqnNGuo4rrrw.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7Bit X-Complaints-To: abuse@aioe.org User-Agent: KNode/4.14.10 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:48283 Date: 2017-10-02T22:07:11+03:00 List-Id: Dmitry A. Kazakov wrote: > On 2017-09-29 20:12, Victor Porton wrote: >> I pass a private type T (whose full type is a record) containing a Handle >> to a subprogram. >> >> (In fact, a handle is a pointer to a C struct.) >> >> All such subprograms can be written as subprograms with "in" mode for T, >> because they do not modify the handle. >> >> But some of these programs logically modify the corresponding C object >> (without modifying the handle itself, they may modify the struct the >> handle points to). >> >> Should I pass T arguments to such subprograms in "in out" mode? To use >> "in" only is allowed by the language rules, but logically them are "in >> out". >> >> What are the arguments for using either "in" or "in out" in this case? > > It is undecided. > > 1. A "transitive" approach is that the mode of a proxy object must > reflect the mode of the target. > > 2. A "non-transitive" one is that modes of two objects are separate. > > E.g. Ada's access types take the second approach. A pointer can be > constant and target mutable and conversely. > > Arguably the first one should be chosen when the proxy hides/represents > the target and the second when both types are independently visible. > > But Ada.Text_IO still takes the second approach. Ada.Text_IO.Create has > in out File_Type. Ada.Text_IO.Put has in File_Type, though the target is > clearly invisible. What should be argument mode for an object for which a handler (of some kind of event or some callback) is set? Set_Handler_*(Object, ...); Currently I am thinking about procedure Set_BNode_ID_Handler (World: Raptor_World_Type_Without_Finalize'Class; Handler: access BNode_ID_Handler'Class); World is a main object of a library, to keep there user settings. Handler is a generator of a blank node ID (that is a unique string starting from underscore, like "_ax123"). Should Set_BNode_ID_Handler be considered as modifying World object? Set_BNode_ID_Handler modifies user settings, World is user-settings, so it should be considered as a modifying subprogram and World argument should be change to "in out" rather than "in" mode, do you agree? -- Victor Porton - http://portonvictor.org