From: "Alex R. Mosteo" <devnull@mailinator.com>
Subject: Re: About 0Y interfaces
Date: Thu, 20 Oct 2005 08:44:42 +0200
Date: 2005-10-20T08:44:42+02:00 [thread overview]
Message-ID: <43573CDA.8060806@mailinator.com> (raw)
In-Reply-To: <2cudnQu4z6l6I8veRVn-hA@megapath.net>
Randy Brukardt wrote:
> "Brian May" <bam@snoopy.apana.org.au> wrote in message
> news:sa4irvtlvr3.fsf@snoopy.microcomaustralia.com.au...
>
>>>>>>>"Randy" == Randy Brukardt <randy@rrsoftware.com> writes:
>>
>> Randy> Personally, I find implementation inheritance to be more
>> Randy> useful than interface inheritance, but obviously others
>> Randy> feel differently. And, in any case, interfaces allow using
>> Randy> OOP with tasks and protected types, which wasn't a
>> Randy> possibility in Ada 95.
>>
>>How?
>>
>>(yes... ok... my imagination is limited tonight...)
>
>
> Task types and protected types can inherit from interfaces. There are rules
> for matching operations declared in those types with the primitive
> operations of the interfaces (it's called "implemented by..."). And of
> course, all of the OOP things work on Interface'Class. In addition,
> dispatching procedure calls can be used as an entry in timed and conditional
> entry calls, and ATC. This gives the effect of dispatching entry calls
> without having to have such a construct.
>
> In addition, there are specific kinds of interfaces (task interfaces,
> protected interfaces, synchronized interfaces [for which the implementation
> must be a task or protected type]); they guarentee that the concrete type is
> the right kind of thing.Task interfaces can be used as a task (in an abort
> statement, the prefix of 'Completed and 'Terminated, and in the task id
> package).
>
> What you can't do is derive from a task or protected type that has an
> interface. That is, there is no implementation inheritance, only interface
> inheritance. We had looked at ways to provide implementation inheritance for
> protected types, but they suffered from real problems of composition. We
> eventually concluded that interface inheritance works fine, and it is quite
> useful by itself, so that's what was provided. The advantage of avoiding any
> implementation inheritance is that all of the locking code for a PT is
> located in one place -- so analyzing its correctness (and applying
> optimizations) can be done simply by reading the code (no hidden magic).
> Determining that a PT has the correct behavior is quite difficult without
> any inheritance; it would be nearly intractable with it.
>
> How long it will be before compilers provide all of this is another
> question. I suspect that it will be a fairly low priority for many
> implementers.
I already implemented an interface using tasks and protected types with
Gnat GAP. I was quite surprised that it worked already...
next prev parent reply other threads:[~2005-10-20 6:44 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-18 12:49 About 0Y interfaces Alex R. Mosteo
2005-10-18 13:18 ` Dmitry A. Kazakov
2005-10-18 14:34 ` Alex R. Mosteo
2005-10-18 16:54 ` Dmitry A. Kazakov
2005-10-18 16:36 ` Pascal Obry
2005-10-18 22:01 ` Randy Brukardt
2005-10-19 9:08 ` Brian May
2005-10-19 21:51 ` Randy Brukardt
2005-10-20 6:44 ` Alex R. Mosteo [this message]
2005-10-19 9:11 ` Pascal Obry
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox