comp.lang.ada
 help / color / mirror / Atom feed
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



  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