From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, WEIRD_PORT autolearn=unavailable autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,44aecd08962a2500 X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2003-06-07 05:19:49 PST Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.stueberl.de!teaser.fr!enst.fr!not-for-mail From: "David C. Hoos, Sr." Newsgroups: comp.lang.ada Subject: Re: Visibility Date: Sat, 7 Jun 2003 07:18:58 -0500 Organization: ENST, France Message-ID: References: <009C830A.36D4A463.0015D3EC@netscape.net> NNTP-Posting-Host: marvin.enst.fr Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Trace: avanie.enst.fr 1054988388 24401 137.194.161.2 (7 Jun 2003 12:19:48 GMT) X-Complaints-To: usenet@enst.fr NNTP-Posting-Date: Sat, 7 Jun 2003 12:19:48 +0000 (UTC) To: , Return-Path: X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1106 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 X-BeenThere: comp.lang.ada@ada.eu.org X-Mailman-Version: 2.1.2 Precedence: list List-Id: comp.lang.ada mail to news gateway List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Xref: archiver1.google.com comp.lang.ada:38785 Date: 2003-06-07T07:18:58-05:00 ----- Original Message ----- From: To: Sent: June 07, 2003 3:21 AM Subject: Visibility > >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. > If you look at your original post (on June 4), there was no "put_line" statement -- hence, the reason for my question > >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 /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. First, Ada.Text_IO.Count is a _type_, not a variable as you state above. Secondly, GNAT did _not_ tell you it didn't know which one to use. It told you (clearly and correctly) that multiple "use" clauses cause hiding, which is correct according to the visibility rules. > > 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. Elaboration is nothing at all like the instantiation of a C++ class. Elaboration is a _process_ that takes place at program startup wherein declarations are executed -- e.g. to initialize a constant or variable. Suppose you had the following declarations in the specification of a package named my_pkg: angle : Long_Float := 13.0; base : Long_Float := 1234.5; package Long_Float_Elementary_Functions is new Ada.Numerics.Generic_Elementary_Functions (Long_Float); use Long_Float_Elementary_Functions; altitude : Long_Float := base * Sin (angle * Ada.Numerics.Pi / 180.0); Using the GNAT compiler, the object file resulting from the compilation of your package would contain a procedure named my_pkg___elabs. That procedure contains the elaboration code for your package specification. When compiling your main program, the compiler will insert code to call that elaboration procedure as well as the elaboration procedures of all of the compilation units making up your program. _That's_ what elaboration is. > > 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 > _______________________________________________ > comp.lang.ada mailing list > comp.lang.ada@ada.eu.org > http://ada.eu.org/mailman/listinfo/comp.lang.ada > >