From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Package's private parts and protected types
Date: Fri, 12 Feb 2010 10:01:37 -0500
Date: 2010-02-12T10:01:37-05:00 [thread overview]
Message-ID: <wcc1vgq33ce.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: u4olm67bj.fsf@stephe-leake.org
Stephen Leake <stephen_leake@stephe-leake.org> writes:
> Robert A Duff <bobduff@shell01.TheWorld.com> writes:
>
>> Adam Beneschan <adam@irvine.com> writes:
>>
>>>...And that
>>> issue exists with GNAT also---you delete some files from your
>>> directory with a wildcard, somehow foo.adb accidentally gets deleted
>>> along with them, and the compiler still thinks your program is OK.
>>
>> Seems unlikely.
>
> Which means it will be very hard/confusing to debug when it does
> happen, since you will not be familiar with the problem. So it is
> important for the tool to handle the unlikely situations nicely.
I suppose...
>> Here's a similar issue: One reasonable design pattern is to have
>> a body that contains a type extension, which registers itself
>> into some global data structure. All calls to this thing
>> are indirect (via the parent's 'Class). Nobody needs visibility
>> on this thing, so its spec is completely empty, except for
>> the obligatory pragma Elaborate_Body. Unfortunately, if you
>> forget to 'with' it, it will be silently ignored.
>
> And if you do 'with' it, GNAT will complain that it's unnecessary, so
> you have to put a pragma Warnings (off) on it. QtAda does this for
> some stuff; it's annoying.
But that's a hugely useful warning. Without it, you end up with
useless 'with's accumulating in your code. An occassional
pragma Warnings is well worth the trouble, IMHO.
> I prefer to handle that case by making the registration function
> visible in the package spec, rather than calling it in the package
> body execution part. Then the main program has to call it, and no
> compiler warnings are generated.
Self-initializing packages are a Good Thing, I think.
I often do it like this: The parent type is limited controlled,
and Initialize/Finalize install/remove the object into some data
structure. The derived type just overrides some primitive
ops (not Initialize/Finalize), and declares one or more
objects -- all in some package body.
- Bob
next prev parent reply other threads:[~2010-02-12 15:01 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-08 4:30 Package's private parts and protected types Hibou57 (Yannick Duchêne)
2010-02-08 8:30 ` Martin
2010-02-08 9:11 ` Hibou57 (Yannick Duchêne)
2010-02-08 10:10 ` Alex R. Mosteo
2010-02-08 10:46 ` Hibou57 (Yannick Duchêne)
2010-02-09 14:55 ` Alex R. Mosteo
2010-02-08 10:20 ` Dmitry A. Kazakov
2010-02-08 10:54 ` Hibou57 (Yannick Duchêne)
2010-02-08 10:58 ` Hibou57 (Yannick Duchêne)
2010-02-08 11:01 ` Dmitry A. Kazakov
2010-02-08 13:19 ` Georg Bauhaus
2010-02-08 15:17 ` Robert A Duff
2010-02-08 16:15 ` (see below)
2010-02-08 20:44 ` Robert A Duff
2010-02-08 22:00 ` Hibou57 (Yannick Duchêne)
2010-02-09 5:48 ` AdaMagica
2010-02-09 14:56 ` Robert A Duff
2010-02-10 2:29 ` Randy Brukardt
2010-02-11 23:46 ` Robert A Duff
2010-02-12 1:29 ` Randy Brukardt
2010-02-11 23:53 ` Robert A Duff
2010-02-12 1:10 ` Randy Brukardt
2010-02-10 16:05 ` Adam Beneschan
2010-02-10 20:17 ` sjw
2010-02-12 0:05 ` Robert A Duff
2010-02-12 11:07 ` Stephen Leake
2010-02-12 15:01 ` Robert A Duff [this message]
2010-02-13 8:00 ` Stephen Leake
2010-02-09 9:04 ` stefan-lucks
2010-02-08 17:11 ` Jeffrey R. Carter
2010-02-08 14:56 ` Robert A Duff
2010-02-08 15:36 ` Dmitry A. Kazakov
2010-02-08 16:06 ` Robert A Duff
2010-02-08 17:46 ` Jean-Pierre Rosen
2010-02-08 20:39 ` Robert A Duff
2010-02-08 21:54 ` Hibou57 (Yannick Duchêne)
2010-02-08 21:50 ` Hibou57 (Yannick Duchêne)
2010-02-08 22:04 ` Hibou57 (Yannick Duchêne)
2010-02-09 10:58 ` Hibou57 (Yannick Duchêne)
2010-02-09 14:47 ` Robert A Duff
2010-02-09 19:34 ` Hibou57 (Yannick Duchêne)
2010-02-09 20:19 ` Hibou57 (Yannick Duchêne)
2010-02-09 23:29 ` Robert A Duff
2010-02-10 2:39 ` Randy Brukardt
2010-02-10 5:12 ` Hibou57 (Yannick Duchêne)
2010-02-10 7:17 ` Hibou57 (Yannick Duchêne)
2010-02-10 16:09 ` Robert A Duff
2010-02-10 22:21 ` Hibou57 (Yannick Duchêne)
2010-02-11 0:48 ` Robert A Duff
2010-02-09 0:48 ` Randy Brukardt
2010-02-09 12:43 ` Hibou57 (Yannick Duchêne)
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox