comp.lang.ada
 help / color / mirror / Atom feed
* Re: Visibility
@ 2003-06-06  5:15 christoph.grein
  0 siblings, 0 replies; 14+ messages in thread
From: christoph.grein @ 2003-06-06  5:15 UTC (permalink / raw)
  To: comp.lang.ada

>     package datatypes is
>         subtype widget is integer;
>     end datatypes;
>
>     with datatypes;
>     package testvisibility is
>         function widget (a: integer) return datatypes.widget;
>     end testvisibility;

Did no one realize that this is an Ada83 restriction? In Ada95, this code is 
correct.

RM83 8.3(16) vs. RM95 8.3(14..23)



^ permalink raw reply	[flat|nested] 14+ messages in thread
[parent not found: <009C830A.36D4A463.0015D3EC@netscape.net>]
* Visibility
@ 2003-06-07  8:21 And838N
  2003-06-07 17:29 ` Visibility Jeffrey Carter
  0 siblings, 1 reply; 14+ messages in thread
From: And838N @ 2003-06-07  8:21 UTC (permalink / raw)
  To: comp.lang.ada

>Why did you "with" and "use" ada.text_io, when your program doesn't 
>need them?  Elimination of this error solves the problem of visibility 
>of "count". 
Well, if I don't "with" ada.text_io I get the following message from
gnatmake.
iotest.adb:4:09: "put_line" is undefined
iotest.adb:4:09: possible missing with of Text_IO
iotest.adb:4:10: "put" is undefined
iotest.adb:4:10: possible missing with of Text_IO
hence, the reason I "withed" text_io.
 
>I could find no such statement on my copy of Cohen's book. 
Page 1039, Section A.2

>There is no such unit as "unbounded_text_io" in the Ada standard
>libraries. 
Hmmm...I have a "with" for Ada.strings.unbounded.text_io and the file 
in <libdirectory>/adainclude/a-suteio.ads (using gcc-lib) says
otherwise.  The package that has the Count function I am talking about
is ada.strings.unbounded.

According to Cohen and obviously GNAT, the Count variable in text_io
and the function with the same name from unbounded are visible in the
same place, and for some reason it, GNAT, does not "determine" or maybe
cannot determine which one to use by "signature".  To me, if anything,
GNAT should have said something to the effect that I was trying to
perform some sort of narrowing conversion rather than telling me that
it did not know which Count to use because of a visibility issue.

with
ada.strings.unbounded,
ada.text_io,
ada.strings.maps;

use
ada.strings.unbounded,
ada.text_io,
ada.strings.maps;

procedure visibilitytest is
        astring: string := "hello world";
        somenumber: integer;
begin
        put_line(astring);
        somenumber := count(to_unbounded_string(astring), to_set(' '));
        put_line(Integer'image(somenumber));
end visibilitytest;

This code does not compile first because of a visibility issue.  The
compiler output, gnatmake visibilitytest.adb -gnatf, yields:
adagcc -c -gnatf visibilitytest.adb
visibilitytest.adb:18:23: "count" is not visible
visibilitytest.adb:18:23: multiple use clauses cause hiding
visibilitytest.adb:18:23: hidden declaration at a-textio.ads:66
visibilitytest.adb:18:23: hidden declaration at a-strunb.ads:217
visibilitytest.adb:18:23: hidden declaration at a-strunb.ads:211
visibilitytest.adb:18:23: hidden declaration at a-strunb.ads:205
gnatmake: "visibilitytest.adb" compilation error

The fix is to specify which one to use on line 18.
somenumber := ada.strings.unbounded.count(to_unbounded_string(as
tring), to_set(' '));.  To me, GNAT should be able to resolve which
count to use because the count in ada.strings.unbounded is a function
and count in ada.text_io is a type.  Not to mention the function
returns (or is of type) Natural, not count.

The answer to my question was in Cohen's book, chapter 10.  The 
rules for the "with" clause and packages are to make a large 
number of files easier to manage and to make it clear to the reader
what is going on with any particular file.  The "with" clause just
makes "stuff" visible; it is up to the programmer/engineer to specify
or clarify, by using an expanded name, what facilities they are "use"
ing from a particular package.  Thus, GNAT's compiler message tells
me not that GNAT can't determine which count to use but that I need
to specify, for future readers, which count I needed.  In doing so
,if I am searching for count, I narrow the search to the exact 
package I need to look in for the count I "used". 

I'll be looking into Elaboration next.  It sounds to me like the 
elaboration of a package is like the instantiation of a C++ class.
If that's true, then I should be able to have multiple elaborations
of a package that all have different values for their data members.
And if that is true, then I've been using the package the wrong way.

Thanks for the help all.

Andrew

__________________________________________________________________
McAfee VirusScan Online from the Netscape Network.
Comprehensive protection for your entire computer. Get your free trial today!
http://channels.netscape.com/ns/computing/mcafee/index.jsp?promo=393397

Get AOL Instant Messenger 5.1 free of charge.  Download Now!
http://aim.aol.com/aimnew/Aim/register.adp?promo=380455



^ permalink raw reply	[flat|nested] 14+ messages in thread
[parent not found: <666191F6.00B406DF.0015D3EC@netscape.net>]
* visibility
@ 2003-06-04 22:12 And838N
  2003-06-05 10:35 ` visibility Preben Randhol
  2003-06-05 15:19 ` visibility Frank J. Lhota
  0 siblings, 2 replies; 14+ messages in thread
From: And838N @ 2003-06-04 22:12 UTC (permalink / raw)
  To: comp.lang.ada

Ok, here's another question.  I'll provide some background information first.

Let us say that there is a procedure in an .adb file that is not in a 
package and it looks something like the following:

----------------------
with
ada.text_io,
ada.integer_text_io,
ada.strings.unbounded;

use
ada.text_io,
ada.integer_text_io,
ada.strings.unbounded;

procedure x is
    astring: unbounded_string := "hello world";
    somenumber: integer := 0;
begin
    somenumber := count(astring, to_set(' '));
    put(somenumber); 
end x;
-----------------------

Now we go compile it and GNAT gives me a message that says there is 
more than one "count" and that I have to specify, by using the full 
package name before the word count, in order to specify which count I
want.  Which isn't so bad, yet...

So out of curiosity I look at the version of count inside ada.text_io 
and compare it to the version of count inside ada.strings.unbounded.  
Turns out the count inside ada.text_io isn't a "procedure" at all, it's 
a variable type.

So I investigate further.  The author of Ada as a second language, 
Norman Cohen provided a chapter on scope and visiblity.  In that 
chapter (actually an appendix), he says that one of the only times 
there will be a visibility problem is when a variable type and a 
procedure have the same name.  

It is hard for me to accept that Ada (GNAT) can't tell the difference 
between a variable type and a procedure?  I wouldn't be surprised if 
both counts were procedures or both counts were variable types, having the same "signature".  But a variable type compared to a procedure?  
Does that mean that after a visibility conflict occurs when compiling 
that there is no "signature" checking? Can someone please explain?

Second question related to "with"ing and "use"ing. (I think the first
question might be resolved by re-working my "with"s and "use"s.)
If I "with" ada.strings, that makes it, and it's children "visible" to
my procedure or package?
If so, then I can "use" only the children I want, like fixed, 
unbounded, unbounded_text_io, etcetera?
If so, does the compiler or linker still link in, or for lack of a 
better term "insert" code into my procedure/package for the children I 
didn't "use"?

Thanks,

Andrew

P.S.
How's the word wrap now?



__________________________________________________________________
McAfee VirusScan Online from the Netscape Network.
Comprehensive protection for your entire computer. Get your free trial today!
http://channels.netscape.com/ns/computing/mcafee/index.jsp?promo=393397

Get AOL Instant Messenger 5.1 free of charge.  Download Now!
http://aim.aol.com/aimnew/Aim/register.adp?promo=380455



^ permalink raw reply	[flat|nested] 14+ messages in thread
* Re: Visibility
@ 1992-12-24 11:48 agate!spool.mu.edu!darwin.sura.net!Sirius.dfn.de!chx400!sicsun!disuns2!lg
  0 siblings, 0 replies; 14+ messages in thread
From: agate!spool.mu.edu!darwin.sura.net!Sirius.dfn.de!chx400!sicsun!disuns2!lg @ 1992-12-24 11:48 UTC (permalink / raw)


In article <1992Dec24.021655.22555@beaver.cs.washington.edu>, pattis@cs.washing
ton.edu (Richard Pattis) writes:
|> In article <1992Dec23.233519.21523@netfs.dnd.ca> BERRYMAN@orca.drep.dnd.ca (
DON BERRYMAN) writes:
|> >
|> >
|> >I have a quesiton on Visiblity. The following Ada code
|> >generates the following error.
|> >
|> >
|> >     package datatypes is
|> >         subtype widget is integer;
|> >     end datatypes;
|> >
|> >     with datatypes;
|> >     package testvisibility is
|> >         function widget (a: integer) return datatypes.widget;
|> >     end testvisibility;
|> >
|> 
|> The LRM says in 8.3(16) "every declaration with the same designator" is
|> hidden. And designators are only identifiers or operator symbols. So it look
s
|> like your designator widget, even when declared in another package and
|> selected, is still hidden.  There are two notes on this, but both involve
|> generics
|> 
|> Now, can anyone say why this interpretation "is a good thing".
|> 
|> Rich Pattis
|> 

I think the rule is intended as the simplest way of preventing someone
from writing the following:

function widget (A : integer := widget) return integer;

This prevents the compiler from having to figure out what the designator
corresponds to and whether or not it should be legal. The above code
obviously won't work but how about:

function widget (A : integer := widget(1)) return integer;

I think they wanted to avoid all these legalistic problems and so they
just came up with the simplest rule possible that eliminated the problem.
If people think that Ada is hairy now they should just imagine if it had
rules like:

Within the specification of a function, every declaration with the same 
designator as the function that is found as a default value in the
parameter list is hidden; ...

I would think rules like this would be a compiler writers nightmare.

Robb Nebbe
nebbe@lglsun.epfl.ch

^ permalink raw reply	[flat|nested] 14+ messages in thread
* Re: Visibility
@ 1992-12-24  2:16 Richard Pattis
  0 siblings, 0 replies; 14+ messages in thread
From: Richard Pattis @ 1992-12-24  2:16 UTC (permalink / raw)


In article <1992Dec23.233519.21523@netfs.dnd.ca> BERRYMAN@orca.drep.dnd.ca (DON
 BERRYMAN) writes:
>
>
>I have a quesiton on Visiblity. The following Ada code
>generates the following error.
>
>
>     package datatypes is
>         subtype widget is integer;
>     end datatypes;
>
>     with datatypes;
>     package testvisibility is
>         function widget (a: integer) return datatypes.widget;
>     end testvisibility;
>

The LRM says in 8.3(16) "every declaration with the same designator" is
hidden. And designators are only identifiers or operator symbols. So it looks
like your designator widget, even when declared in another package and
selected, is still hidden.  There are two notes on this, but both involve
generics

Now, can anyone say why this interpretation "is a good thing".

Rich Pattis


-- 
------------------------------------------------------------------------------
  Richard E. Pattis                     "Programming languages are like
  Department of Computer Science         pizzas - they come in only "too"
    and Engineering                      sizes: too big and too small."

^ permalink raw reply	[flat|nested] 14+ messages in thread
* Visibility
@ 1992-12-23 23:35 agate!spool.mu.edu!uwm.edu!cs.utexas.edu!torn!nott!netfs!news
  0 siblings, 0 replies; 14+ messages in thread
From: agate!spool.mu.edu!uwm.edu!cs.utexas.edu!torn!nott!netfs!news @ 1992-12-23 23:35 UTC (permalink / raw)


I have a quesiton on Visiblity. The following Ada code
generates the following error.


     package datatypes is
         subtype widget is integer;
     end datatypes;

     with datatypes;
     package testvisibility is
         function widget (a: integer) return datatypes.widget;
     end testvisibility;



     $ ada testviz
         7       function widget (a: integer) return datatypes.widget;
     .........................................................1
     %ADAC-E-NOTDECLALLHIDER, (1) All declarations with designator widget are
             globally hidden by function specification widget at line 7 [LRM 8.
3(16)]
     %ADAC-E-ERRPROCESS, Errors compiling package specification testvisibility 
in
             file FLD$CENTRAL:[BERRYMAN.MFP.MOTIF]TESTVIZ.ADA;4
     %ADAC-E-ENDDIAGS, Ada compilation completed with 1 diagnostic



I can see why this would have happened if I'd coded:

     with datatypes; USE DATATYPES;
     package testvisibility is
         function widget (a: integer) return widget;
     end testvisibility;


But since I have a full specification for DATATYPES.WIDGET
why is there a problem???


Don Berryman
Defence Research Establishment Pacific
Canadian Forces Base Esquimalt
Victoria, BC, CANADA, V0S-1B0
604-363-2731    604-363-2856fax
berryman@orca.drep.dnd.ca

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2003-06-08 16:18 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-06  5:15 Visibility christoph.grein
     [not found] <009C830A.36D4A463.0015D3EC@netscape.net>
2003-06-07 12:18 ` Visibility David C. Hoos, Sr.
2003-06-08  3:28   ` Visibility Hyman Rosen
2003-06-08 10:20     ` Visibility Frank J. Lhota
2003-06-08 16:18       ` Visibility Robert I. Eachus
  -- strict thread matches above, loose matches on Subject: below --
2003-06-07  8:21 Visibility And838N
2003-06-07 17:29 ` Visibility Jeffrey Carter
     [not found] <666191F6.00B406DF.0015D3EC@netscape.net>
2003-06-05 15:16 ` visibility David C. Hoos
2003-06-04 22:12 visibility And838N
2003-06-05 10:35 ` visibility Preben Randhol
2003-06-05 15:19 ` visibility Frank J. Lhota
1992-12-24 11:48 Visibility agate!spool.mu.edu!darwin.sura.net!Sirius.dfn.de!chx400!sicsun!disuns2!lg
1992-12-24  2:16 Visibility Richard Pattis
1992-12-23 23:35 Visibility agate!spool.mu.edu!uwm.edu!cs.utexas.edu!torn!nott!netfs!news

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