From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: This can't be done in Ada...or?
Date: 12 Feb 2005 14:02:52 -0500
Date: 2005-02-12T14:02:52-05:00 [thread overview]
Message-ID: <wccacq9mwir.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: mailman.138.1108216526.527.comp.lang.ada@ada-france.org
Duncan Sands <baldrick@free.fr> writes:
> > The compiler can optimize away everything inside the "if
> > Logging_Enabled". But it can't optimize away the evaluation of the
> > parameters unless it can prove the absence of side effects.
> > For example:
> >
> > Trace.Error(..., "Bad value of X " & Debug_Info(X));
> >
> > where Debug_Info is some user-defined function that produces useful
> > debug info about some complicated data structure called X.
> > It has no side effects, but the compiler doesn't know that, usually.
>
> GNAT's pragma Pure_Function might help here.
Yes.
Note that Pure_Function has different semantics than Pure (besides the
fact that Pure_Function has finer granularity). Pragma Pure has rules
that require the thing to actually *be* pure. The only way to
circumvent those rules is with things like machine code inserts.
But Pure_Function has no such rules: if you lie, the compiler will
believe you, and your program might malfunction.
Robert Dewar objected to the rules for pragma Pure during Ada 9X -- he
thought it should be like Pure_Function in that regard. That's because
(like all compile time rules) the rules are conservative. You can't
write a memoizing function and declare it Pure, but you can declare it
Pure_Function.
>... Is something like that
> planned for Ada 2005?
Somebody answered that, "no". If I were designing the language, I would
allow Pure on procedures and functions as well as library packages.
I would require compile time checking. Then I would add *another*
pragma to turn off the checking; this could be placed in the body.
Seems like the best of both worlds: Robert can have his pure memoizing
functions, but in cases where the compiler *can* check the rules,
the rules are checked.
- Bob
next prev parent reply other threads:[~2005-02-12 19:02 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-11 16:33 This can't be done in Ada...or? Per Lindquist
2005-02-11 16:51 ` Duncan Sands
2005-02-12 19:55 ` Florian Weimer
2005-02-14 8:34 ` Per Lindquist
2005-02-14 8:17 ` Per Lindquist
2005-02-11 17:02 ` Jeff C
2005-02-11 18:27 ` Robert A Duff
2005-02-11 23:51 ` Ludovic Brenta
2005-02-11 23:52 ` Robert A Duff
2005-02-12 13:55 ` Duncan Sands
2005-02-12 14:58 ` Martin Krischik
2005-02-12 15:56 ` Martin Dowie
2005-02-12 19:02 ` Robert A Duff [this message]
2005-02-14 8:49 ` Per Lindquist
2005-02-11 17:08 ` Jerome Hugues
2005-02-14 9:05 ` Per Lindquist
2005-02-14 13:07 ` Georg Bauhaus
2005-02-12 1:10 ` Jeffrey Carter
2005-02-12 14:01 ` Duncan Sands
2005-02-13 0:27 ` Jeffrey Carter
2005-02-14 9:10 ` Per Lindquist
2005-02-15 0:40 ` Jeffrey Carter
2005-02-15 7:40 ` Per Lindquist
2005-02-15 8:39 ` OT: Google reply (Was: Re: This can't be done in Ada...or?) Adrien Plisson
2005-02-15 9:42 ` Per Lindquist
2005-02-15 8:27 ` This can't be done in Ada...or? Per Lindquist
2005-02-14 22:10 ` Manuel G. R.
2005-02-15 8:47 ` Mark Lorenzen
2005-02-15 9:09 ` Jacob Sparre Andersen
2005-02-15 9:31 ` Mark Lorenzen
2005-02-15 9:48 ` Jacob Sparre Andersen
2005-02-15 10:07 ` Mark Lorenzen
2005-02-15 10:15 ` Martin Dowie
2005-02-17 22:09 ` Randy Brukardt
2005-02-18 6:53 ` Martin Dowie
2005-02-15 13:46 ` Robert A Duff
2005-02-15 13:41 ` Robert A Duff
2005-02-15 16:30 ` Per Lindquist
2005-02-15 19:38 ` Martin Dowie
2005-02-15 20:20 ` Robert A Duff
2005-02-17 21:52 ` Simon Wright
2005-02-17 22:06 ` Randy Brukardt
2005-02-17 22:40 ` Mark Lorenzen
2005-02-16 0:04 ` Jeffrey Carter
2005-02-16 0:09 ` Jeffrey Carter
2005-02-17 9:47 ` Per Lindquist
2005-02-17 22:36 ` Randy Brukardt
2005-02-14 15:21 ` Peter Amey
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox