comp.lang.ada
 help / color / mirror / Atom feed
From: Victor Porton <porton@narod.ru>
Subject: Re: Logical constants
Date: Mon, 02 Oct 2017 22:07:11 +0300
Date: 2017-10-02T22:07:11+03:00	[thread overview]
Message-ID: <oqu2ot$r3v$1@gioia.aioe.org> (raw)
In-Reply-To: oqmbm4$chf$1@gioia.aioe.org

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


  reply	other threads:[~2017-10-02 19:07 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
2017-10-02 19:07   ` Victor Porton [this message]
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