comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Allocators and exceptions
Date: Tue, 11 Sep 2007 14:27:45 +0200
Date: 2007-09-11T14:22:34+02:00	[thread overview]
Message-ID: <5rjahxfvhazu.bol1ilmh6uew$.dlg@40tude.net> (raw)
In-Reply-To: 1189502377.626510.172690@22g2000hsm.googlegroups.com

On Tue, 11 Sep 2007 02:19:37 -0700, Maciej Sobczak wrote:

> On 11 Wrz, 11:16, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> wrote:
> 
>>>>> P.S. Exceptions in constructors is a bad idea.
>>
>>> No, it's a very good idea. Otherwise you have to deal with half-baked
>>> objects, which is Even Bigger Mess (tm).
>>
>> This is what you get when the exception is propagated out of a constructor.
> 
> In this case I want the constructor to be rolled back.
> Without exceptions (and rollback) the only option for handling errors
> in initialization of (sub)components is to leave them half-baked.

> When I create a new object and there is some error on the way, I want
> to consider the object as if it never existed.

This error is likely unrecoverable, so you have to reconsider your design
which allowed such errors.

BTW, formally everything is exactly as you wished! Observe, that

   new T(-5)

creates an object of the type T_Access. This object does not come to
existence and the compiler carefully eliminates any traces of this object.
Everything is fine!

What you actually want, but didn't say it, is that T_Access would take care
of the things it points to, so its constructor (new) would. That is not
what access types in Ada can. You want abstract access types. And this is
the core of the problem. Ada does not have abstract interfaces for built-in
types, alas.

> This is what allows me to keep abstractions and invariants: either I
> have the complete object with its guaranteed invariants, or there is
> nothing. Anything in between is mess.

This is violated upon aggregation of initialized components with side
effects. I don't argue that this is good, I only state that this is the
current language design and that it would be quite challenging to alter.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2007-09-11 12:27 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-09  7:40 Allocators and exceptions Maciej Sobczak
2007-09-09 12:17 ` anon
2007-09-09 20:31   ` Maciej Sobczak
2007-09-09 22:43     ` Simon Wright
2007-09-10 12:10       ` Maciej Sobczak
2007-09-10 19:08         ` Simon Wright
2007-09-10  2:56     ` anon
2007-09-10 12:42     ` Dmitry A. Kazakov
2007-09-10 21:48       ` Maciej Sobczak
2007-09-11  9:16         ` Dmitry A. Kazakov
2007-09-11  9:19           ` Maciej Sobczak
2007-09-11 12:27             ` Dmitry A. Kazakov [this message]
2007-09-11 19:07               ` Maciej Sobczak
2007-09-11 22:56                 ` Georg Bauhaus
2007-09-12 12:36                   ` Maciej Sobczak
2007-09-12 22:19                     ` Randy Brukardt
2007-09-12  9:32                 ` Dmitry A. Kazakov
2007-09-12 12:42                   ` Maciej Sobczak
2007-09-12 15:25                     ` Dmitry A. Kazakov
2007-09-12 12:29             ` Stephen Leake
2007-09-12 12:46               ` Maciej Sobczak
2007-09-12 20:53                 ` Simon Wright
2007-09-12 22:32                   ` Randy Brukardt
2007-09-12 23:43                     ` Simon Wright
2007-09-13  3:42                       ` Randy Brukardt
2007-09-13  3:36                     ` Randy Brukardt
2007-09-13  9:43                     ` Maciej Sobczak
2007-09-12 22:25                 ` Randy Brukardt
2007-09-13 11:51                 ` Stephen Leake
2007-09-12 14:14               ` Markus E L
2007-09-10 10:37 ` Allocators and exceptions => Read Me First anon
2007-09-10 12:16   ` Maciej Sobczak
2007-09-10 22:10     ` Allocators and exceptions => Trying Again anon
2007-09-10 23:15       ` Markus E L
2007-09-10 15:44 ` Allocators and exceptions Adam Beneschan
2007-09-10 21:58   ` Maciej Sobczak
2007-09-10 22:07   ` Jeffrey R. Carter
2007-09-11  9:14   ` Dmitry A. Kazakov
2007-09-11  9:23     ` Maciej Sobczak
2007-09-11  2:36 ` Randy Brukardt
2007-09-11 15:33   ` Adam Beneschan
2007-09-11 19:21     ` Maciej Sobczak
2007-09-11 21:56     ` Adam Beneschan
2007-09-12  0:34       ` Jeffrey R. Carter
2007-09-12 12:13         ` Maciej Sobczak
2007-09-12 16:34           ` Jeffrey R. Carter
2007-09-12 23:50             ` Jeffrey R. Carter
2007-09-12 12:22       ` Maciej Sobczak
2007-09-12 14:11         ` Markus E L
2007-09-12 16:08         ` Adam Beneschan
2007-09-12 20:35           ` Dmitry A. Kazakov
2007-09-12 21:01             ` Adam Beneschan
2007-09-12 22:45             ` Randy Brukardt
2007-09-13  7:48               ` Dmitry A. Kazakov
2007-09-12  3:08 ` Allocators and exceptions -- Debugging says memory leak! anon
replies disabled

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