comp.lang.ada
 help / color / mirror / Atom feed
From: Florian Weimer <fw@deneb.enyo.de>
Subject: Re: Storage management
Date: Sun, 02 Nov 2008 15:27:58 +0100
Date: 2008-11-02T15:27:58+01:00	[thread overview]
Message-ID: <87abciurrl.fsf@mid.deneb.enyo.de> (raw)
In-Reply-To: wccej1vw07f.fsf@shell01.TheWorld.com

* Robert A. Duff:

> Florian Weimer <fw@deneb.enyo.de> writes:
>
>> What is the current state of the art with regard to programmer support
>> for storage management?
>>
>> With GNAT, Ada.Finalization adds tons of run-time calls to deal with
>> abort deferral (even with pragma Restrictions (No_Abort_Statements)),
>> puts the object on some sort of list, and does some secondary stack
>> allocations which I don't understand.  Clearly, this is not supposed
>> to be used in performance-critical code, so I doubt it can be used for
>> a generic smart pointer implementation.  (Object allocation in inner
>> loops is generally a bad idea, but this overhead is also incurred when
>> copying smart pointers around.)
>
> AdaCore is actively working on making finalization much more efficient
> (e.g. avoiding all those finalization lists, when possible).

This sounds interesting.  Unfortunately, the language-mandated
overhead (primarily abort deferral) is difficult to get rid of.  I
hope that there will be a configuration pragma which eliminates it,
even if it means using a self-compiled run-time.

>> Is there some other approach?  Can limited types be used to enforce
>> linearity (in the sense of linear types, cf.
>> <http://home.pipeline.com/~hbaker1/Use1Var.html> and
>> <http://iml.univ-mrs.fr/~girard/linear.pdf>)?
>
> Yes, you can do better with limited types (derive from
> Limited_Controlled instead of Controlled).

Hmm.  What I want is to mark certain subprograms as consumers, and get
a warning when a subprogram is exited without calling a consumer
subprogram for a local variable of limited type.  OTOH, with overflow
checking, there's a chance of raising an exception almost all the
time, so I'll need something like

      Clear (Ref);
   exception
      when others =>
         Clear (Ref);
         raise;
   end Proc;

at the end of each procedure.  So it's not actually desirable, either,
even if tools support (maybe based on ASIS?) to enforce this coding
style.

> There is some intention to support proper GC at AdaCore, but it's going
> to be rather far in the future -- not a whole lot of (paying) customer
> demand for that.  Meanwhile, you can try the Boehm "conservative" GC.

I know, but I fear that some aspects are difficult to get 100% right.
For instance, it seems necessary to change the way the secondary stack
is allocated, so that it is scanned for pointers, too.  I'm not sure
if this can be done with a purely library-based approach.



  reply	other threads:[~2008-11-02 14:27 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-01 11:13 Storage management Florian Weimer
2008-11-01 22:28 ` Robert A Duff
2008-11-02 14:27   ` Florian Weimer [this message]
2008-11-07  1:14     ` Randy Brukardt
2008-11-07  8:30       ` Dmitry A. Kazakov
2008-11-07  9:54         ` Niklas Holsti
2008-11-07  9:20           ` Dmitry A. Kazakov
2008-11-07 12:12             ` Niklas Holsti
2008-11-07 13:22               ` Dmitry A. Kazakov
2008-11-07 13:28                 ` Georg Bauhaus
2008-11-07 14:41                   ` Dmitry A. Kazakov
2008-11-10 14:28                 ` christoph.grein
2008-11-10 16:08                   ` Dmitry A. Kazakov
2008-11-08 11:04         ` sjw
2008-11-08 12:33           ` Dmitry A. Kazakov
2008-11-10  9:34             ` sjw
2008-11-01 22:36 ` sjw
replies disabled

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