comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org>
Subject: Re: storage error: stack overflow
Date: Wed, 19 Aug 2015 14:47:41 -0700
Date: 2015-08-19T14:47:41-07:00	[thread overview]
Message-ID: <mr2tem$9ov$2@dont-email.me> (raw)
In-Reply-To: <87k2srf1j8.fsf@theworld.com>

On 08/19/2015 01:47 PM, Bob Duff wrote:
> "Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org> writes:
>>
>> You do not /need/ access types for this. Avoiding them requires some thought,
>> but that's what S/W engineers do.
> 
> I don't think it's fair to say that people who use access types
> (i.e. pointers) aren't proper "S/W engineers".  It's true that Ada
> doesn't require pointers in many cases where other languages do.
> But Ada still requires pointers if the class-wide variable
> needs to change its tag.  And pointers are required for recursive
> data structures.  Etc.

I didn't say that people who use access types aren't proper S/W engineers. I
implied that people who use access types unnecessarily because they're unwilling
or unable to do the extra thinking needed to avoid aren't S/W engineers.

> I think what you and Randy have been saying (or should have been?)
> is more like:
> 
>     1. Try to avoid using pointers.
> 
>     2. When you have to use them, try to encapsulate.
> 
>     3. When possible, use the encapsulations already provided by the
>        language (i.e. the Ada.Containers).
> 
> But there are all sorts of reasons why Ada.Containers might not be
> suitable, so in those cases, you WILL use pointers, preferably
> encapsulated.  But that's different from saying "never use pointers"
> (or "never use access types").


Almost. Using an abstraction that happens to be implemented using pointers is
not the same as using pointers. The whole point of the abstraction is so the
user doesn't have to think in the terms of its implementation.

For example, when I write Ada, the compiler implements it in machine code. Ada
is an abstraction that allows me to not have to think in terms of machine code.
I consider it incorrect to refer to using Ada as using machine code. I also
think it's incorrect to refer to using an abstraction implemented with pointers
as using pointers.

So I'd probably say:

Before using pointers,

1. Try to use an existing abstraction that doesn't require using pointers, such
as Ada.Containers.

2. If that's not possible, try to create an abstraction that encapsulates the
use of pointers and doesn't require its user to use pointers.

3. If that's not possible, then see if there's anything else that will allow you
to avoid using pointers.

4. If that's not possible, then use pointers.

-- 
Jeff Carter
"Alms for an ex-leper!"
Monty Python's Life of Brian
75

  reply	other threads:[~2015-08-19 21:47 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-11 21:53 storage error: stack overflow hreba
2015-08-11 22:19 ` Jeffrey R. Carter
2015-08-12 15:01   ` hreba
2015-08-12 16:00     ` AdaMagica
2015-08-12 17:51     ` Jeffrey R. Carter
2015-08-13  2:17       ` hreba
2015-08-12  8:27 ` briot.emmanuel
2015-08-13  1:34   ` hreba
2015-08-13  2:53     ` Jeffrey R. Carter
2015-08-13  7:05     ` Simon Wright
2015-08-14 13:53       ` hreba
2015-08-14 16:01         ` Simon Wright
2015-08-14 17:00         ` Simon Wright
2015-08-13  7:19     ` Simon Wright
2015-08-14 13:20       ` hreba
2015-08-12 10:31 ` Markus Schöpflin
2015-08-13  1:36   ` hreba
2015-08-12 10:57 ` Simon Wright
2015-08-13  0:55   ` hreba
2015-08-13  6:58     ` Simon Wright
2015-08-18  2:16 ` hreba
2015-08-18  5:49   ` Jeffrey R. Carter
2015-08-18  7:24   ` Egil H H
2015-08-18 12:23     ` hreba
2015-08-18 12:37       ` Jacob Sparre Andersen
2015-08-18 14:02         ` hreba
2015-08-18 14:11           ` Dmitry A. Kazakov
2015-08-18 14:16           ` Jeffrey R. Carter
2015-08-18 20:56             ` Randy Brukardt
2015-08-19  1:48             ` hreba
2015-08-19  5:10               ` Jeffrey R. Carter
2015-08-19  8:44               ` Georg Bauhaus
2015-08-19 11:56                 ` hreba
2015-08-19 20:53               ` Bob Duff
2015-08-18 14:15       ` Egil H H
2015-08-19 13:07         ` hreba
2015-08-18 14:16       ` Jeffrey R. Carter
2015-08-19 13:12         ` hreba
2015-08-19 20:47         ` Bob Duff
2015-08-19 21:47           ` Jeffrey R. Carter [this message]
2015-08-20  7:18             ` Dmitry A. Kazakov
2015-08-20 20:48           ` Randy Brukardt
replies disabled

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