comp.lang.ada
 help / color / mirror / Atom feed
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


  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