comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Why stack can hold indefinite objects but records cannot?
Date: Tue, 28 Nov 2017 16:51:01 -0600
Date: 2017-11-28T16:51:01-06:00	[thread overview]
Message-ID: <ovkp8l$84m$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: ovkh24$1bh5$1@gioia.aioe.org

"Victor Porton" <porton@narod.ru> wrote in message 
news:ovkh24$1bh5$1@gioia.aioe.org...
> Why is it OK to create an indefinite object as a local variable ("on 
> stack")
> but not OK to put an indefinite object into a record?
>
> How records are less powerful than the stack?

Because records can be composed into other data structures, while a local 
variable cannot be composed into something else.

> By the way, how indefinite local variables can be implemented? (just
> curious)

Depends on the compiler. Janus/Ada allocates them from a special storage 
pool (which really just wraps the normal heap), then frees them when the 
scope is left. Some other compilers change the size of the stack frame 
instead.

> Moreover, wouldn't it to be a good idea to allow indefinite objects in
> records (thus making the record itself indefinite, even if it has no
> discriminants)? I realize that then it would be difficult to track which
> records are definite and which indefinite. But what's about the idea?

It would be very hard to implement in composite objects: imagine an 
multi-dimensional array of such records. That would be especially true for 
implementations that try to avoid using storage pools at all costs (which is 
necessary for some safety-critical customers).

                                               Randy.


      parent reply	other threads:[~2017-11-28 22:51 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-28 20:31 Why stack can hold indefinite objects but records cannot? Victor Porton
2017-11-28 20:46 ` Dmitry A. Kazakov
2017-11-28 21:31   ` Victor Porton
2017-11-28 21:50     ` Dmitry A. Kazakov
2017-11-28 22:51 ` Randy Brukardt [this message]
replies disabled

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