comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Run-Time Type Assignment
Date: Thu, 29 Aug 2002 14:56:07 GMT
Date: 2002-08-29T14:56:07+00:00	[thread overview]
Message-ID: <wccwuq9zpbs.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: H1LxwL.45o@world.std.com

"Ben Brosgol" <brosgol@world.std.com> writes:

> The reason it is safe to pass nested subprograms as parameters in Pascal is
> that Pascal does not allow subprograms to be used as values for variables or
> placed in data structures.  GNAT's 'Unrestricted_Access is just as safe,
> provided that you abide by the Pascal restrictions.

Yeah, and array indexing in C is just as safe as in Ada -- so long as
you don't index outside the array bounds.  Driving 120 miles per hour
in a 30 mph zone without wearing a seat belt is perfectly safe -- so
long as you don't cause a collision.

OK, sorry for infamatory rhetoric, Ben, but claiming that
'Unrestricted_Access is as safe as in Pascal is just plain silly.
The fact is, you can accidentally create dangling pointers using
'Unrestricted_Access, which you can't do by passing procedural
parameters in Pascal.

>...(I.e.,
> Unrestricted_Access still entails the other checks required by the language;
> e.g. static subtype conformance for corresponding formals, matching
> conventions.)  For example:
> 
> procedure Test_Unrestricted_Access is
>   type Acc is access procedure;
>   Ref : Acc;
>   procedure P1(N : Integer) is begin null; end P1;
>   procedure P2;
>   pragma Convention(C, P2);
>   procedure P2 is begin null; end P2;
> begin
>   Ref := P1'Unrestricted_Access; -- error
>   Ref := P2'Unrestricted_Access; -- error

Well, it's nice that it detects *some* errors (it detects misspellings
like 'Unrestricted_Acess, too!), but it doesn't detect dangling
pointers.

>   declare
>     procedure Q is begin null; end Q;
>   begin
>     Ref := Q'Unrestricted_Access; -- OK

That's the problem (the above "OK").  If you call Ref.all later, you're
in trouble.  GNAT thinks it's OK, but it is *not* OK.

>     Ref := Q'Access;  --error
>   end;
> end Test_Unrestricted_Access;
> 
> The lines indicated by the "-- error" comments were diagnosed as
> compile-time errors by GNAT.
> 
> As for portability, if you are using GNAT why would you ever want to move to
> some other compiler? :-)

I see the smiley, but, for example, the company I work for (SofCheck,
Inc.) produces Ada compilers for targets that GNAT does not support.
And we've recently heard Robert Dewar pointing out that ACT is not
attempting to cover the *entire* Ada business -- quite reasonably, ACT
has a narrower focus, as do other vendors.

- Bob



  parent reply	other threads:[~2002-08-29 14:56 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-08-28  6:53 Run-Time Type Assignment Robert C. Leif
2002-08-28 11:04 ` Robert Dewar
2002-08-28 13:35   ` Robert A Duff
2002-08-28 14:56     ` Larry Kilgallen
2002-08-28 14:31       ` Robert A Duff
2002-08-28 14:59         ` Lutz Donnerhacke
2002-08-28 22:32           ` Robert A Duff
2002-08-29 22:55           ` Dmitry A.Kazakov
2002-08-28 18:03         ` Frank J. Lhota
2002-08-28 18:37           ` Pat Rogers
2002-08-28 22:47           ` Robert A Duff
2002-08-29 13:32             ` Ben Brosgol
2002-08-29 13:52               ` SIMON Claude
2002-08-29 14:30                 ` Robert A Duff
2002-08-29 18:27                   ` Randy Brukardt
2002-08-29 14:56               ` Robert A Duff [this message]
2002-08-30  3:04                 ` Ben Brosgol
2002-08-30 22:54                   ` Robert A Duff
2002-08-29 15:09               ` Larry Kilgallen
2002-08-29 14:29                 ` Marin D. Condic
2002-08-28 13:41 ` Robert A Duff
2002-08-28 17:15 ` Hyman Rosen
2002-08-28 20:27 ` Björn Lundin
     [not found] <002a01c24e5f$9ee347b0$789a0844@robertqgx6k4x9>
2002-08-28 11:33 ` sk
     [not found] ` <3D6CB4F5.F4E05D76@myob.com>
2002-08-28 11:37   ` sk
2002-08-28 15:39   ` Robert C. Leif
2002-08-28 18:53     ` Jeffrey Carter
2002-08-28 20:54   ` Robert C. Leif
2002-08-28 22:55     ` Robert A Duff
2002-08-29  3:18       ` Robert C. Leif
     [not found] <005101c24ea9$0de9c960$789a0844@robertqgx6k4x9>
2002-08-28 16:06 ` sk
2002-08-28 22:44   ` tmoran
2002-08-29  0:37   ` tmoran
replies disabled

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