From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,6b1a1ed8b075945 X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news3.google.com!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!club-internet.fr!feedme-small.clubint.net!nuzba.szn.dk!news.jacob-sparre.dk!pnx.dk!not-for-mail From: "Randy Brukardt" Newsgroups: comp.lang.ada Subject: Re: Allocators and exceptions Date: Mon, 10 Sep 2007 21:36:56 -0500 Organization: Jacob's private Usenet server Message-ID: References: <1189323618.588340.87180@o80g2000hse.googlegroups.com> NNTP-Posting-Host: static-69-95-181-76.mad.choiceone.net X-Trace: jacob-sparre.dk 1189478043 19046 69.95.181.76 (11 Sep 2007 02:34:03 GMT) X-Complaints-To: news@jacob-sparre.dk NNTP-Posting-Date: Tue, 11 Sep 2007 02:34:03 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1807 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1896 Xref: g2news2.google.com comp.lang.ada:1873 Date: 2007-09-10T21:36:56-05:00 List-Id: "Maciej Sobczak" wrote in message news:1189323618.588340.87180@o80g2000hse.googlegroups.com... > What happens when during the initialization of the newly allocated > object an exception is raised? > > I cannot find anything in the AARM that covers this case. What I want > to find exactly is the *guarantee* that the allocated memory is > automatically reclaimed. > Any relevant paragraph numbers are highly welcome. Amplifying Adam's response: (1) Nothing in the Ada standard is about "goodness". In particular, there is nothing anywhere in the standard that resources like memory ever get reclaimed. I suspect most implementers will in fact do reclamation (and avoid leaks), but it is not part of the Ada language as described by the standard. (2) I believe that the current wording of the standard *requires* that reclamation *not* be performed in examples like this, at least if there are any controlled components in the type. That's because there is no permission in Ada to do finalization early - it has to be done only if the object is explicitly destroyed or when the master goes out of scope -- which for an allocated object is when the *type* goes out of scope. (Not everyone agrees with the above opinion, but everyone does agree that it is an issue in some cases. But there is nothing close to an agreement on how to fix the standard, so don't hold your breath waiting for a fix...) Yes, this also means that an Ada compiler implementing garbage collection is mostly likely incorrect. It's highly unlikely, however, that anyone will be testing for such "errors" formally. I did write an ACATS-style test for a case like this and determined that most compilers do in fact finalization the object at the appropriate time: which suggests that they leak memory in this case. Moral: Never, ever, write code that intentionally raises an exception during an allocator. (Unintentional exceptions are just plain bugs and ought to get fixed in testing.) Better still, don't use any allocators at all (use the predefined containers if you need dynamic memory management). Randy. For what