From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Logical constants
Date: Fri, 29 Sep 2017 22:50:09 +0200
Date: 2017-09-29T22:50:09+02:00 [thread overview]
Message-ID: <oqmbm4$chf$1@gioia.aioe.org> (raw)
In-Reply-To: oqm2f1$1sdc$1@gioia.aioe.org
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.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2017-09-29 20:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-29 18:12 Logical constants Victor Porton
2017-09-29 20:50 ` Dmitry A. Kazakov [this message]
2017-10-02 19:07 ` Victor Porton
2017-10-02 19:26 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox