From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Generic-Package Elaboration Question / Possible GNAT Bug.
Date: Mon, 21 Nov 2011 14:41:05 -0500
Date: 2011-11-21T14:41:05-05:00 [thread overview]
Message-ID: <wccmxbpp8ku.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 128rdz2581345$.c4td19l7qp9z$.dlg@40tude.net
"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
> On Mon, 21 Nov 2011 08:08:04 -0500, Robert A Duff wrote:
>
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>>
>>>>> I don't know if Ada keeps that promise for generic bodies, ...
>>
>> I think it does. I'd be interested in any counterexamples.
>
> GNAT sometimes reports errors in generic bodies upon instantiation, but I
> am not sure if these are not compiler bugs.
I have seen such compiler bugs in the past.
There are also some cases where GNAT allows representation clauses
in a generic body that might turn out to be illegal in some instances.
But as far as I know, these are optional -- GNAT didn't HAVE to support
them in generic bodies, so this violation of the contract model is
GNAT's, not Ada's. And it's useful, although nonportable.
>>>...Generic contracts are too weak for that.
>>
>> Well, it's not that the contracts are too weak. You just have to
>> consider the entire generic spec (including the private part,
>> unfortunately), as part of the "contract".
>
> That is C++'s approach. If matching formal parameters does not imply
> legality, that does not look very contracted.
The C++ approach is that the entire template is the "contract"
(which means there really is no contract).
In Ada, at least the body is excluded. I agree it would be cleaner
if the contract were just the generic formals, but in Ada that would
require a lot of additional information in the formals.
>> Also, the generic contract model applies only to compile-time rules.
>
> Sure, that is a contract model of the meta language of generics. If it were
> properly contracted generics produced only legal "Ada proper" programs.
>
>> The fact that the instance body is guaranteed to be legal doesn't
>> mean that it will work properly!
>
> Yes, the same applies to non-generic subprograms. Properly typed arguments
> do not guaranty it working. Legality does not imply correctness.
>
>> And there are a few cases where we
>> deliberately "cheat" in the RM, by making something raise an exception
>> in a generic, when it would normally be a legality rule.
>
> Conversion of errors into exceptions is an extremely bad idea. The same
> fault is represented by dynamic pre-/pos-conditions, assertions,
> accessibility checks, tag errors.
But it's not feasible to catch all errors statically. If you made a
rule that all preconditions (for example) must be statically checked,
that would simply mean lots of preconditions are inexpressible.
I agree about accessibility checks -- I wish those were always static.
- Bob
next prev parent reply other threads:[~2011-11-21 19:41 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-19 21:14 Generic-Package Elaboration Question / Possible GNAT Bug Shark8
2011-11-19 22:12 ` Robert A Duff
2011-11-19 23:36 ` Shark8
2011-11-20 9:55 ` Dmitry A. Kazakov
2011-11-21 7:25 ` AdaMagica
2011-11-21 8:43 ` Dmitry A. Kazakov
2011-11-21 10:25 ` AdaMagica
2011-11-21 13:08 ` Robert A Duff
2011-11-21 13:50 ` Dmitry A. Kazakov
2011-11-21 19:41 ` Robert A Duff [this message]
2011-11-22 8:21 ` Dmitry A. Kazakov
2011-11-21 20:40 ` J-P. Rosen
2011-11-22 8:29 ` Dmitry A. Kazakov
2011-11-22 10:25 ` Georg Bauhaus
2011-11-22 14:32 ` Dmitry A. Kazakov
2011-11-22 15:02 ` Georg Bauhaus
2011-11-22 16:23 ` Dmitry A. Kazakov
2011-11-22 17:46 ` Georg Bauhaus
2011-11-22 19:15 ` Dmitry A. Kazakov
2011-11-22 21:03 ` Randy Brukardt
2011-11-22 21:26 ` Dmitry A. Kazakov
2011-11-23 0:07 ` Georg Bauhaus
2011-11-23 8:44 ` Dmitry A. Kazakov
2011-11-23 9:32 ` Simon Wright
2011-11-23 9:56 ` Dmitry A. Kazakov
2011-11-23 11:03 ` Georg Bauhaus
2011-11-23 11:13 ` Dmitry A. Kazakov
2011-11-23 11:25 ` Georg Bauhaus
2011-11-23 13:14 ` Dmitry A. Kazakov
2011-11-23 13:59 ` Georg Bauhaus
2011-11-23 14:43 ` Dmitry A. Kazakov
2011-11-23 16:10 ` Georg Bauhaus
2011-11-23 19:51 ` Dmitry A. Kazakov
2011-11-24 0:59 ` Georg Bauhaus
2011-11-24 9:14 ` Dmitry A. Kazakov
2011-11-23 15:12 ` Simon Wright
2011-11-23 19:53 ` Dmitry A. Kazakov
2011-11-24 8:07 ` Simon Wright
2011-11-24 9:27 ` Dmitry A. Kazakov
2011-11-24 10:49 ` Georg Bauhaus
2011-11-24 13:14 ` Dmitry A. Kazakov
2011-11-24 14:31 ` Georg Bauhaus
2011-11-24 16:32 ` Dmitry A. Kazakov
2011-11-24 11:15 ` Brian Drummond
2011-11-24 18:12 ` Simon Wright
2011-11-24 23:52 ` Brian Drummond
2011-11-23 10:35 ` Brian Drummond
2011-11-23 9:54 ` Georg Bauhaus
2011-11-23 10:30 ` Dmitry A. Kazakov
2011-11-23 4:08 ` Yannick Duchêne (Hibou57)
2011-11-23 4:11 ` Yannick Duchêne (Hibou57)
2011-11-22 23:52 ` Georg Bauhaus
2011-11-23 9:04 ` Dmitry A. Kazakov
2011-11-23 11:15 ` Georg Bauhaus
2011-11-23 13:30 ` Dmitry A. Kazakov
2011-11-23 14:42 ` Georg Bauhaus
2011-11-23 19:48 ` Dmitry A. Kazakov
2011-11-24 1:36 ` Georg Bauhaus
2011-11-24 10:52 ` Dmitry A. Kazakov
2011-11-24 11:30 ` Georg Bauhaus
2011-11-24 12:52 ` Dmitry A. Kazakov
2011-11-24 14:45 ` Georg Bauhaus
2011-11-25 9:54 ` Dmitry A. Kazakov
2011-11-24 7:46 ` stefan-lucks
2011-11-24 3:07 ` Shark8
2011-11-24 6:07 ` Yannick Duchêne (Hibou57)
2011-11-24 10:10 ` Dmitry A. Kazakov
2011-11-24 11:15 ` Georg Bauhaus
2011-11-24 22:48 ` Shark8
2011-11-25 9:25 ` Yannick Duchêne (Hibou57)
2011-11-26 21:59 ` Shark8
2011-11-25 9:47 ` Dmitry A. Kazakov
2011-11-25 10:15 ` Georg Bauhaus
2011-11-25 10:51 ` Yannick Duchêne (Hibou57)
2011-11-25 15:45 ` Georg Bauhaus
2011-11-25 16:05 ` Yannick Duchêne (Hibou57)
2011-11-25 16:19 ` Yannick Duchêne (Hibou57)
2011-11-23 3:49 ` Yannick Duchêne (Hibou57)
2011-11-23 8:50 ` Georg Bauhaus
2011-11-23 9:45 ` Yannick Duchêne (Hibou57)
2011-11-23 10:55 ` Georg Bauhaus
2011-11-23 3:20 ` Yannick Duchêne (Hibou57)
2011-11-23 15:05 ` Robert A Duff
2011-11-21 17:00 ` Adam Beneschan
2011-11-23 3:13 ` Yannick Duchêne (Hibou57)
2011-11-24 3:47 ` Shark8
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox