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



  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