comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Runtime type selection
Date: Tue, 13 Oct 2009 09:50:57 +0300
Date: 2009-10-13T09:50:57+03:00	[thread overview]
Message-ID: <4ad42370$0$26362$4f793bc4@news.tdc.fi> (raw)
In-Reply-To: <hb0f14$2gt$1@munin.nbi.dk>

Randy Brukardt wrote:
> "Niklas Holsti" <niklas.holsti@tidorum.invalid> wrote in message 
> news:4ad23819$0$6256$4f793bc4@news.tdc.fi...
> ...
>> Did you read about the package Ada.Tags (RM 3.9)? There is a generic 
>> function Ada.Tags.Generic_Dispatching_Constructor that takes a tag as 
>> parameter and creates an object with that tag, but I don't hink there is 
>> any way to find the tags for all types in a given derivation class. So 
>> even with  Ada.Tags.Generic_Dispatching_Constructor your program still has 
>> to register the types, or their tags, or a prototype object of each type, 
>> to create the program-accessible set of types/tags that can be in the 
>> graph.
>>
>> Perhaps some expert can explain why this reflection capability (find tags 
>> for all derived types in a class) was not included in Ada.Tags? Perhaps 
>> because Ada run-time systems do not need such a function for their own 
>> purposes?
> 
> I think that would be impossible in general, for the same reason that the 
> rules about what tags are returned from calls to Internal_Tag are mostly 
> written with "may". The problem is that tagged types can be created and 
> cease to exist asychronously with respect to a call to a function in 
> Ada.Tags. (For instance, if another task creates a tagged type by calling a 
> subprogram with such a type declaration.) The model of Ada.Tags is that is 
> can be implemented either with a mostly static data structure (created at 
> link-time) or with a fully dynamic structure. In the latter case, complex 
> locking would be required to ensure any particular (useful) answer for one 
> of these functions. In the former case, something similar to the dynamic 
> structure (and locking) would be required to avoid returning non-existent 
> tags. It was felt that such requirements would add a lot of complication and 
> runtime cost to the implementation of this package without a corresponding 
> benefit.

Thanks for this clear explanation, Randy. Interesting to hear that this 
question was actually discussed by the language definition team.

> The only language requirement is that each tagged type is 
> connected to its immediate parent (in order to check type conversions), 
> anything else further would be needed only to implement your proposed 
> function.

Well, I did not really mean to "propose" such a function, I only tried 
to explain to the OP (who could have made use of this functionality) 
that it is not provided now, but I could not myself explain why not, as 
you could.

As I understand it, Ada is not designed to support much reflection, so 
the absence of this function does not surprise or disappoint me. I don't 
know about the OP, of course...

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .



  reply	other threads:[~2009-10-13  6:50 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-11 16:41 Runtime type selection xorque
2009-10-11 17:02 ` Niklas Holsti
2009-10-11 17:15   ` xorque
2009-10-11 19:54     ` Niklas Holsti
2009-10-12  9:26       ` Georg Bauhaus
2009-10-12 12:02         ` xorque
2009-10-12 23:42       ` Randy Brukardt
2009-10-13  6:50         ` Niklas Holsti [this message]
2009-10-13  0:59       ` Adam Beneschan
2009-10-13  7:01         ` Niklas Holsti
2009-10-11 17:15 ` mockturtle
2009-10-11 20:06 ` Dmitry A. Kazakov
2009-10-13 10:45   ` Colin Paul Gloster
2009-10-13 10:17     ` Dmitry A. Kazakov
2009-10-13 15:11 ` xorque
2009-10-13 15:50   ` Dmitry A. Kazakov
2009-10-13 16:02     ` xorque
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox