comp.lang.ada
 help / color / mirror / Atom feed
From: Freejack <freejack@nowhere.net>
Subject: Re: Objects and the Stack?
Date: Sat, 18 Dec 2004 20:50:47 GMT
Date: 2004-12-18T20:50:47+00:00	[thread overview]
Message-ID: <pan.2004.12.18.15.59.54.115445@nowhere.net> (raw)
In-Reply-To: PI%wd.637$Wt5.248352@read2.cgocable.net

On Sat, 18 Dec 2004 14:41:33 -0500, Warren W. Gay VE3WWG wrote:

> The difference between what alloca() gets you and what you
> get in the declare block is a minor difference:
> 
>     -- Pseudo Ada here (Ada-ised C code for alloca())
>     declare
>       My_String : String_Access := Alloca(String(1..8));
>     begin
>       ...
>       Put_Line(My_String.all);
> 
>     -- Real Ada here
>     declare
>        My_String : String(1..8);
>     begin
>        ...
>        Put_Line(My_String);
> 
> Apart from getting a pointer from alloca(), I don't see any
> advantage. Both forms allocate from the stack frame.
> 
>>    declare
>>       Name: String := "";
>>       pragma Extensible_Object(Name);
>>    begin
>>       ...
>>       Name := Name & ':'; -- changes its size
>>       ...
>> 
>> It's an idea.
> 
> This is taking the alloca() idea further than I think it
> goes. I could be wrong here, but can you realloc() an
> alloca() region?  If so, that is something that Ada does
> in fact lack (including a realloc() in general, which I
> pine for when growing arrays).
> 
> Warren.

Hmmm... Perhaps we could do that, and even more, by using Tasks and/or
Protected Objects. After all, on a platform with stack frames, doesn't
instantiation of a new task initialize a new stack frame? A Task
Storage_Pool would also be a Pool of stack frames? 
I'll have to go look it up, but if there is a way to declare Tasks or
Protected Objects as Controlled or Limited_Controlled within a
Storage_Pool(or perhaps in the general storage_pool), then it might be
possible.

Another possibility would be duplicating exactly the current task in
another task with a larger stack frame, switching control to the new task,
and killing off the old one, or keeping it around if the current new task
shrinks to the point where it's larger stack frame is no longer needed.

I'm gonna have to read up on that. And look at some compiler source.

Freejack



  reply	other threads:[~2004-12-18 20:50 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-12-16 22:27 Objects and the Stack? Freejack
2004-12-16 23:13 ` Nick Roberts
2004-12-20 14:50   ` Marc A. Criley
2004-12-20 16:22     ` Marius Amado Alves
2004-12-20 18:31       ` Dmitry A. Kazakov
2004-12-17  0:28 ` Jeffrey Carter
2004-12-17  8:45   ` Freejack
2004-12-17 11:11     ` Martin Dowie
2004-12-17 11:46     ` Nick Roberts
2004-12-17 19:52       ` Freejack
2004-12-18  4:02         ` Nick Roberts
2004-12-27  4:34         ` Dave Thompson
2004-12-18 19:41       ` Warren W. Gay VE3WWG
2004-12-18 20:50         ` Freejack [this message]
2004-12-18 21:15           ` Dmitry A. Kazakov
2004-12-27  4:34         ` Dave Thompson
2004-12-18  0:12     ` Jeffrey Carter
2004-12-18  0:43       ` Jeffrey Carter
replies disabled

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