comp.lang.ada
 help / color / mirror / Atom feed
From: Vinzent 'Gadget' Hoefler <nntp-2004-05@t-domaingrabbing.de>
Subject: Re: Manifesto against Vector
Date: Fri, 07 May 2004 14:38:24 +0200
Date: 2004-05-07T14:38:24+02:00	[thread overview]
Message-ID: <8bsm901f05g3iuskrddo4b5uqt4i3760to@jellix.jlfencey.com> (raw)
In-Reply-To: 1qem901e1v178lr2nc9lsn7hu7d46ciuea@4ax.com

Dmitry A. Kazakov wrote:

>On Thu, 06 May 2004 15:30:42 +0200, Vinzent 'Gadget' Hoefler
><nntp-2004-05@t-domaingrabbing.de> wrote:
>
>>Dmitry A. Kazakov wrote:
>>
>>>On Thu, 06 May 2004 11:41:11 +0200, Vinzent 'Gadget' Hoefler
>>><nntp-2004-05@t-domaingrabbing.de> wrote:
>>>
>>>>Dmitry A. Kazakov wrote:
>>>>
>>>>>Why that should be told? I'd say that "with" is superfluous.
>>>>
>>>>No! If at all then it is "use" which is superfluous. ;-)
>>>
>>>How so? "Use" has some semantical sense. It changes visibility. You
>>>might claim that this is not necessary, but that would be another
>>>story. On the contrary "with" has no other sense than being just a
>>>hint to the compiler/linker.
>>
>>And a idea to me which packages another one is using.
>
>Either you agree on that IDE could tell you that better, or I would
>claim that all packages with-ed implicitly should be made explicit!
>(:-))

Well, call me old school or so, but most of the times the only IDE I
use is just a simple text editor.

And sometimes I am just using the ssh-connection to a simple
text-based terminal to change some lines of code. No place for a big
IDE keeping track of everything here.

>>This is
>>especially useful with some of the more "evil" parts of Ada like
>>Unchecked_Conversion. :)
>
>Then it it should be "without"!

Hmm.

You mean instead of:

|with Elan520.Basic_Types;
|with Elan520.CPU_Registers;
|with Elan520.MMCR;
|with Elan520.Programmable_Address_Region;
|with Elan520.Registers;
|with Elan520.SDRAM_Controller_Registers;
|
|package body Elan520 is [...]

I should simply write:

|without Ada.*;
|without System.*;
|without Unchecked_*;

? ;-)

>BTW Ada will now have a notion of profile (like Ravenscar). It would
>be nice to have an ability to define a profile, a contract of using
>some definite subset of Ada. Like one without instantiations of
>Unchecked_Conversion.

You've never read Annex H.4?

|pragma Restrictions (No_Unchecked_Conversion);

Well, it's not exactly a profile, but seeing how many of these you
could combine just to define this or that specific profile...

Just assuming that each argument to pragma Restriction could have two
options only, you could form up to 65536 different profiles alone from
those 16 restrictions defined there.

>ARM does not specify how unit library works. So even if you write
>"with X", it does not warranty that X will be with-ed, especially when
>it is not in the library. (:-))

Well, if it doesn't, it won't compile in the end.

>You have to set up the project, use -I
>key in gnatmake etc. The point is, if this work has to be done in one
>place, why should it be repeated in the source again?

Because I want to fucking *know* about it.

>>(BTW, for that discussion it might be funny to note that these days
>>even more and more of the C++-folks consider "using some_namespace;"
>>to be evil. And now we want to encourage to do exactly the opposite of
>>that in Ada?)
>
>Because Ada was designed with "use" in mind!

Hmm. What's wrong with that? ;)

>The difference is that
>Ada allows view management. To drop this idea, essential for building
>and maintaining large layered system, just because of a moss-grown
>language where types and subroutines are global, that would be at
>least unwise.

Yes, but this is exactly what "use" without "with" would be then (well
well, not quite). But all the "use"s could then be scattered all over
the source file and no human would know about what really *is* used
without reading the whole source file.

>>For me it is still the same principle: Make something as local as you
>>can. No matter if it is a variable, a procedure, ... or a namespace.
>
>I didn't object this principle.

Well, the "with use Something;" (or whatever someone might like to see
instead) which was proposed would violate this principle. :)

It would throw me back to the old days of good ol' Turbo-Pascal where
each "uses" of a unit put the whole thing into view.

>>>Then semantics of renaming is inconsitent with one of "use", or better
>>>to say, simply inconsistent. This is the source of numerous problems:
>>>
[...]
>>>   when X_Error =>
>>>      -- This is OK, multiple views of same thing
>>>      ...
>>>   when End_Error =>
>>>      -- This is illegal, viewing two different views of one thing!
>>>      ...
>>>end C;
>>
>>See. That's a perfect example for a "use"-Problem, which I simply want
>>to avoid (and which I want to do consistently):
>
>No, "use" is consistent.

Yes. I didn't say otherwise. I just mentioned that it can cause
problems as you illustrated here.

>When you use something twice, that does not
>create additional views.

Well, right. If you do it inside the same namespace.

>What is inconsistent, is that renaming of an
>exception creates a view colliding with a view of the renamed thing.

No, not exactly, we're talking about different packages here. What
you've created here was:

|A.End_Error;
|B.End_Error;

and (not exactly created)

|Ada.Exceptions.End_Error;

Yes, because of the renaming in this example those are all the same
thing.

_But_: the compiler does not want to know about the implementation.
So, because nobody can hinder me to change the definition in A and/or
B later, it won't know [and even if it does, it does not *want* to ;)]
that all these names all denote the same entity. So when you said just
"End_Error", the compiler could not know which one to choose, of
course. Really, it does not matter that all these names in fact just
accidently denote the same entity, they are not bound to do this each
time.

Remember that Ada is about software engineering and this includes
being able to compile something even without having the actual
implementation of some other packages as long as the interface is
known.

Consider when you just change the definitions in packages A and B you
will have the same problem of having three entities with the same
short name and then the compiler *really* can't know which one you
meant.
So now suppose in the former case the compiler would compile package C
(like you want it to) and now your junior co-programmer decides to
change A.End_Error and declares it as its own exception, not a
renaming because the first attempt was just a quick prototype to get
the rest of the project to compile. Now your package C would just
suddenly *not* compile, although nothing really changed considerably,
the interface of the other packages remain the same (after all,
A.End_Error is still an exception) and package C wasn't even changed a
single bit. That would cause horrible confusion.

So the current behaviour is indeed very consistent.

>>I don't know what this has to do with renaming. If you'd declare
>>End_Error separately in the packages you would run into the same
>>problem, so in fact it is a "use" problem.
>
>>Well, you might argue, just because you renamed it and thus in fact is
>>exactly the same,
>
>Yes I do.

As I am trying to argue above, this behaviour is absolutely correct.

>>the compiler could figure this out by itself. But if
>>it would really do that, it then would be me to call this behaviour
>>inconsistent.
>
>Don't you agree that there is a difference between views and viewed
>things?

Well, sort of. Yes.

>How could names indicating the same thing conflict?

Because they are not in the same view.

Just because someone writes "Foo : constant Some_Type;" and another
"Bar : constant Some_Type;" and in the private part they *are* the
same that doesn't mean, you will *not* sooner or later run into
problems when you just randomly interchange them in your code.

>What is
>overloaded here to cause the conflict?

Common sense?

Who tells you that A.End_Error and B.End_Error have to remain the same
in all eternity, just because they were at the very moment you used
them?

>What is the sense of the
>conflict? Something unresolved, ambiguous, what?

The possibility that a simple change would break the project that
compiled perfectly.

>There is no problem. Just if you were consistently against any view
>management,

Oh, view management is ok.

>then you should have gone further:
>"Never use child packages, they are globally using their parents!"

Yes, they do. Of course they do: Logically such a package hierarchy is
just a big single package. The fact that you *do* break it into more
small packages and thus be able to control the views into it in some
finer granularity doesn't break anything here.

A subroutine inside a soubroutine can see its "parent", too. I don't
see any problem involved here.


Vinzent.

-- 
To err is human, to forgive beyond the scope of the operating system.



  reply	other threads:[~2004-05-07 12:38 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-04  3:20 Manifesto against Vector Alexander E. Kopilovich
2004-05-04 16:30 ` chris
2004-05-04 17:19   ` Marius Amado Alves
2004-05-04 20:40     ` Peter C. Chapin
2004-05-04 20:58       ` Xenos
2004-05-07  8:05         ` Ranges in C++ Martin Krischik
2004-05-07 23:18           ` James Rogers
2004-05-08  6:45             ` Martin Krischik
2004-05-10 16:19             ` Xenos
2004-05-10 18:04               ` Martin Krischik
2004-05-10 19:03                 ` Xenos
2004-05-11  5:59                   ` Martin Krischik
2004-05-04 17:16 ` Manifesto against Vector Jeffrey Carter
2004-05-04 18:24   ` Marius Amado Alves
2004-05-04 19:17     ` Xenos
2004-05-04 19:53       ` Marius Amado Alves
2004-05-05  9:24       ` Georg Bauhaus
2004-05-05  5:28     ` Russ
2004-05-05  7:01       ` tmoran
2004-05-05 17:37       ` Martin Dowie
2004-05-06  3:42         ` Russ
2004-05-06  5:55           ` Martin Dowie
2004-05-06  7:03           ` Jean-Pierre Rosen
2004-05-06  9:29             ` Dmitry A. Kazakov
2004-05-06  9:41               ` Vinzent 'Gadget' Hoefler
2004-05-06 12:44                 ` Dmitry A. Kazakov
2004-05-06 13:30                   ` Vinzent 'Gadget' Hoefler
2004-05-06 14:35                     ` Wes Groleau
2004-05-07  8:23                     ` Dmitry A. Kazakov
2004-05-07 12:38                       ` Vinzent 'Gadget' Hoefler [this message]
2004-05-09 20:34                         ` Dmitry A. Kazakov
2004-05-10  8:26                           ` Vinzent 'Gadget' Hoefler
2004-05-10 12:13                             ` Dmitry A. Kazakov
2004-05-06 14:48                   ` Georg Bauhaus
2004-05-07  8:31                     ` Dmitry A. Kazakov
2004-05-07 14:30                       ` Georg Bauhaus
2004-05-09 20:33                         ` Dmitry A. Kazakov
2004-05-12 19:49                       ` Randy Brukardt
2004-05-07  7:01                   ` Martin Krischik
2004-05-06  9:55               ` with and use again (was: Manifesto against Vector) Marius Amado Alves
2004-05-06 12:04                 ` Dmitry A. Kazakov
2004-05-07  6:53                   ` Martin Krischik
2004-05-09 20:33                     ` Dmitry A. Kazakov
2004-05-10  7:00                       ` Martin Krischik
2004-05-10 12:15                         ` Dmitry A. Kazakov
2004-05-07 16:27                 ` with and use again Warren W. Gay VE3WWG
2004-05-06 19:53               ` Manifesto against Vector Jean-Pierre Rosen
2004-05-07  0:42                 ` Jeffrey Carter
2004-05-07  6:49                   ` Jean-Pierre Rosen
2004-05-07 18:20                     ` Jeffrey Carter
2004-05-07 19:15                       ` Simon Wright
2004-05-10  6:49                       ` Jean-Pierre Rosen
2004-05-10 17:25                         ` Jeffrey Carter
2004-05-11 13:25                           ` Jean-Pierre Rosen
2004-05-07  5:00               ` Simon Wright
2004-05-07  6:40               ` Martin Krischik
2004-05-07 16:25               ` Warren W. Gay VE3WWG
2004-05-07  6:33             ` Martin Krischik
2004-05-06 14:28           ` Wes Groleau
2004-05-07  5:15             ` Russ
2004-05-10 11:55               ` Martin Dowie
2004-05-12 19:44                 ` Randy Brukardt
2004-05-12 19:42               ` Randy Brukardt
2004-05-13  5:23                 ` Russ
2004-05-13  5:48                   ` Randy Brukardt
2004-05-13 14:43                     ` Robert I. Eachus
2004-05-14  1:02                     ` Russ
2004-05-07  6:29           ` with use - again [Was: Manifesto against Vector] Martin Krischik
2004-05-07 11:18             ` Manuel Collado
2004-05-07 14:37               ` Georg Bauhaus
2004-05-07 13:41             ` Mark Lorenzen
2004-05-07 13:06               ` Martin Krischik
2004-05-05 19:45       ` Manifesto against Vector Marius Amado Alves
2004-05-04 18:42   ` Ada.Containers names Marius Amado Alves
2004-05-05 23:21   ` Manifesto against Vector Robert I. Eachus
2004-05-07  4:55 ` Matthew Heaney
2004-05-10  4:10   ` Matthew Heaney
2004-05-12  7:41     ` Pascal Obry
2004-05-12 12:11       ` Matthew Heaney
2004-05-12 12:50       ` Matthew Heaney
2004-05-10  6:41 ` Martin Krischik
2004-05-10 17:41   ` Jeffrey Carter
2004-05-11  1:29     ` Matthew Heaney
2004-05-11 20:53       ` Alexander E. Kopilovich
     [not found]       ` <XRVrJe0vzF@VB1162.spb.edu>
2004-05-11 22:26         ` Marius Amado Alves
2004-05-11  5:55     ` Martin Krischik
     [not found] <PnHmmb05QD@VB1162.spb.edu>
2004-05-04  9:07 ` Marius Amado Alves
2004-05-04 13:08   ` (see below)
2004-05-04 15:16     ` Martin Dowie
2004-05-05 13:21       ` Kevin Hostelley
2004-05-05 13:53         ` Georg Bauhaus
replies disabled

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