From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: pointer questions
Date: 27 Oct 2005 20:42:05 -0400
Date: 2005-10-27T20:42:05-04:00 [thread overview]
Message-ID: <wccoe5aa2w2.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: id98f.2656$yX2.2217@newsread2.news.pas.earthlink.net
"Jeffrey R. Carter" <spam@spam.com> writes:
> Robert A Duff wrote:
> > Never? Well, these kinds of low-level hacks are _rarely_ a good idea.
> > But you might need them when interfacing to some other language
> > that uses such trickery.
>
> True, but then you're not using Ada, you're using Ada and X, which I
> addressed later. For just Ada, you never need the kind of pointers the
> OP was asking about.
>
> > Maybe the kinds of programs I write are different. Question for those
> > who rarely use access types: what sort of application areas are you
> > talking about? Mine are usually software development tools -- such as
> > compilers.
>
> Maybe. I use unbounded data structures frequently, but I don't write a
> new one every time. Instead, I reuse existing generic data structures,
> so the code I write doesn't contain those access types.
Yeah, me too.
>... When you talk
> about all the access types in your compiler code, are you talking about
> frequent creation of new access types, reuse of existing but exposed
> access types, or reuse of packages that hide the use of access types?
> That will help decide if compilers are different.
All of the above. ;-)
I don't know how to create mutually recursive data types in Ada without
access types, or something pretty-much equivalent to them (e.g. indices
into an array can be used as "pointers"). In compilers, such data
structures are common. Think of an abstract syntax tree. I want to
say, an expression can be a function call, and a function call contains
actual parameters, and actual parameters contain expressions. You can't
say that directly in Ada -- you have to introduce access-to-expression,
or some such thing.
An abstract syntax tree for Ada will have upwards of a hundred different
tagged types (or variants, if you go the variant record route). And you
need access types all over the place, because these things are highly
recursive.
> For learning Ada, one should write some dynamic data structures, but to
> use Ada, you should reuse existing dynamic data structures. I don't
> count access types hidden in reused packages as using access types.
Fair enough.
> Recently, I've written a generic package for genetic algorithms, and a
> TSP program that uses it, and a package to implement the Nicias
> encryption algorithm, and a program that uses it. Nary an access type in
> sight.
>
> > If I designed a language, I would go even further in that direction.
> > I would allow mutually recursive types without intervening pointers.
> > The only need for pointers in my language would be where
> > reference semantics is desired -- e.g. when you want two pointers
> > to the same object, such that updates to that object can be seen
> > through both.
>
> We're still waiting to see an informal specification for Duff, or
> whatever it's called :)
;-)
You and I might have to wait a long time for that, given that I have to
make a living. I can do so making compilers and other tools, but since
the Ada 9X project, nobody seems interested in paying me to do language
design. Sigh. For now, it's a hobby.
I don't even know what to call it. Not "Duff", for sure. ;-)
> > I don't really agree. A beginner to Ada who knows how to program
> > (in some other language, such as C) might well want to make a
> > linked list, for example, and that requires pointers of some
> > sort -- usually access types.
>
> Again, for learning Ada, certainly. For using Ada, no. Part of learning
> Ada is learning to reuse. Even after the beginner has crafted a generic,
> unbounded list to learn about generics, access types, memory management,
> and information hiding, it's still a good idea for him to use the
> unbounded list component from <your favorite library here> (or
> Ada.Containers in 0X) to learn to reuse others' packages, and to gain
> the benefit of SW that has been much more thoroughly tested than his own
> effort.
I agree.
> My comments that pointers are rarely needed in Ada are usually addressed
> to beginners coming from C who think they must use pointers for
> everything, from passing a parameter that can be modified to creating an
> array with bounds known only at run time. I hope that my saying this
> will cause them to stop, every time they think they need a pointer, and
> see if perhaps Ada can do it without one. In that way, perhaps they will
> gain a better understanding and appreciation of Ada.
I see what you mean, but I think it might be more helpful to point out
the specific cases where pointers are unnecessary in Ada:
If you want to loop through an array, don't use pointers like you do in C.
If you want to modify a parameter, use 'in out', instead of an explicit
pointer, and trust the compiler to pass by-ref when appropriate.
(Except that it's embarrassing that you can't say 'in out' in
functions.)
If you want a dynamic-sized thing, and you know the size at
object-creation time, and the size doesn't change, you don't need
pointers in Ada.
If you want a dynamic-sized record component, discriminants may be in
order.
Etc.
Just saying "You hardly ever need pointers in Ada" is misleading,
IMHO.
- Bob
next prev parent reply other threads:[~2005-10-28 0:42 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-26 23:01 pointer questions Szymon Guz
2005-10-26 23:51 ` Gene
2005-10-26 23:58 ` tmoran
2005-10-27 1:12 ` Stephen Leake
2005-10-27 2:30 ` Steve
2005-10-27 5:56 ` Jeffrey R. Carter
2005-10-27 10:19 ` Szymon Guz
2005-10-27 14:14 ` Robert A Duff
2005-11-07 4:21 ` Dave Thompson
2005-10-27 14:11 ` Robert A Duff
2005-10-27 15:13 ` Marc A. Criley
2005-10-27 18:53 ` Jeffrey R. Carter
2005-10-27 17:29 ` Martin Dowie
2005-10-27 18:28 ` Marc A. Criley
2005-10-27 19:28 ` Martin Dowie
2005-10-28 0:12 ` Robert A Duff
2005-10-28 11:57 ` Dr. Adrian Wrigley
2005-10-28 21:26 ` Jeffrey R. Carter
2005-10-30 22:26 ` Robert A Duff
2005-10-31 6:21 ` Jeffrey R. Carter
2005-11-02 0:52 ` Dr. Adrian Wrigley
2005-11-02 3:46 ` Jeffrey R. Carter
2005-11-02 11:16 ` Dr. Adrian Wrigley
2005-11-02 13:39 ` Robert A Duff
2005-11-02 15:34 ` Bob Spooner
2005-11-02 18:59 ` Björn Persson
2005-10-27 18:43 ` Jeffrey R. Carter
2005-10-28 0:42 ` Robert A Duff [this message]
2005-10-28 5:58 ` Martin Dowie
2005-10-28 21:24 ` Jeffrey R. Carter
2005-10-28 11:53 ` David
2005-10-29 12:25 ` Simon Wright
2005-10-27 17:19 ` Martin Krischik
2005-11-07 4:21 ` Dave Thompson
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox