From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: memory management in Ada: tedious without GC?
Date: Sun, 25 May 2008 10:12:20 +0200
Date: 2008-05-25T10:12:22+02:00 [thread overview]
Message-ID: <6z9y05h0wes6$.126fz3zrcxvae$.dlg@40tude.net> (raw)
In-Reply-To: wccskw7a0i4.fsf@shell01.TheWorld.com
On Sat, 24 May 2008 16:52:03 -0400, Robert A Duff wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>
>> Yes, this why it is safe to assume that the program may not rely on it.
>
> Such assumptions are never safe, because programmers make mistakes.
That is why Ada should be picky. I prefer to qualify such programs as
erroneous and allow the compiler to reject them. This is independent on
whether we would fix the order or not.
>> Yes, this is the same dilemma as with re-ordering operands in expressions.
>
> I don't like the permission to reorder operands, either.
> But at least for that, there's a legitimate efficiency concern.
> For finalization, I seriously doubt that the permission
> to reorder has any significant efficiency benefit.
type X is record
A : Boolean := False;
B : Integer := 1;
C : Boolean := False;
end record;
May the compiler group A and C and initialize both them by zeroing memory?
If the initialization order were fixed, that would be illegal to do.
>> I understand your argument, but I think that the solution is wrong. I'd
>> prefer a better control over the side effects in order to make such
>> (erroneous) programs illegal. It is especially important for modern
>> pipelined, multi-core architectures. Why not to perform initialization of
>> components concurrently?
>
> Sure, if the compiler can prove there are no side effects,
> it can reorder, intersperse, and/or do things in parallel.
> In that case, "in declaration order" and "in implementation-defined
> order" are equivalent rules.
Yes, this could be the ground for a compromise. Let us introduce pure
subprograms, not as a pragma Pure, but as a contract.
Now, the components are initialized by pure subprograms can be in any order
when they are siblings. Others are initialized in their declaration order.
> But this is a much bigger change to Ada.
The compiler would not need to prove anything. That would be the
programmer's responsibility to ensure purity of an implementation. Of
course, a decent compiler would make some reasonable checks, but it would
be sufficient to verify that pure bodies do not call impure ones. Surely, a
pure primitive operation could not be overridden by an impure one, etc.
That does not look much intrusive.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2008-05-25 8:12 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-16 17:44 memory management in Ada: tedious without GC? jhc0033
2008-05-16 18:56 ` Ludovic Brenta
2008-05-16 20:42 ` Maciej Sobczak
2008-05-16 21:45 ` Ivan Levashew
2008-05-16 22:59 ` Peter C. Chapin
2008-05-17 5:24 ` jhc0033
2008-05-17 7:50 ` Ivan Levashew
2008-05-16 23:05 ` Randy Brukardt
2008-05-19 3:50 ` Matthew Heaney
2008-05-19 7:55 ` Dmitry A. Kazakov
2008-05-19 13:18 ` Georg Bauhaus
2008-05-19 14:16 ` Dmitry A. Kazakov
2008-05-23 23:15 ` Robert A Duff
2008-05-24 0:45 ` Randy Brukardt
2008-05-24 8:25 ` Dmitry A. Kazakov
2008-05-24 16:14 ` Robert A Duff
2008-05-24 19:04 ` Dmitry A. Kazakov
2008-05-24 20:52 ` Robert A Duff
2008-05-25 8:12 ` Dmitry A. Kazakov [this message]
2008-05-25 11:28 ` Maciej Sobczak
2008-05-25 12:35 ` Robert A Duff
2008-05-26 8:16 ` Dmitry A. Kazakov
2008-05-24 19:39 ` Georg Bauhaus
2008-05-24 20:45 ` Robert A Duff
2008-05-19 8:35 ` Maciej Sobczak
2008-05-19 15:11 ` Matthew Heaney
2008-05-19 21:13 ` Maciej Sobczak
2008-05-23 23:03 ` Robert A Duff
2008-05-24 0:12 ` Adam Beneschan
2008-05-16 22:45 ` anon
2008-05-17 7:34 ` Pascal Obry
2008-05-17 15:11 ` Bob Klungle
2008-05-17 15:27 ` Pascal Obry
2008-05-17 16:18 ` Georg Bauhaus
2008-05-20 8:04 ` Ole-Hjalmar Kristensen
2008-05-20 8:01 ` Ole-Hjalmar Kristensen
2008-05-20 10:03 ` Martin Krischik
2008-05-17 17:23 ` Martin Krischik
2008-05-17 16:51 ` Maciej Sobczak
2008-05-17 17:45 ` Pascal Obry
2008-05-17 22:28 ` Samuel Tardieu
2008-05-18 7:03 ` Martin Krischik
2008-05-18 8:50 ` jhc0033
2008-05-18 9:31 ` Dmitry A. Kazakov
2008-05-18 14:10 ` Maciej Sobczak
2008-05-18 14:59 ` Dmitry A. Kazakov
2008-05-18 20:51 ` Maciej Sobczak
2008-05-19 8:36 ` Dmitry A. Kazakov
2008-05-18 15:03 ` Martin Krischik
2008-05-18 18:27 ` jhc0033
2008-05-19 4:12 ` Matthew Heaney
2008-05-19 8:39 ` Maciej Sobczak
2008-05-19 15:37 ` Matthew Heaney
2008-05-19 21:21 ` Maciej Sobczak
2008-05-19 23:02 ` Matthew Heaney
2008-05-19 10:27 ` Martin Krischik
2008-05-17 22:42 ` Peter C. Chapin
2008-05-18 6:58 ` Martin Krischik
2008-05-18 6:52 ` Martin Krischik
2008-05-18 14:16 ` Maciej Sobczak
2008-05-17 14:30 ` Brian Drummond
2008-05-17 16:47 ` Maciej Sobczak
2008-05-19 14:45 ` Brian Drummond
2008-05-20 7:42 ` Maciej Sobczak
2008-05-20 18:01 ` jayessay
2008-05-18 8:06 ` Simon Wright
2008-05-18 14:21 ` Maciej Sobczak
2008-05-18 20:48 ` Simon Wright
2008-05-19 14:40 ` Brian Drummond
2008-05-19 3:44 ` Matthew Heaney
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox