comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Pure function aspect?...
Date: Fri, 13 Jan 2012 09:45:46 +0100
Date: 2012-01-13T09:45:46+01:00	[thread overview]
Message-ID: <18gmy0hbklhv5.swfwyybigqv2$.dlg@40tude.net> (raw)
In-Reply-To: jens6a$3fb$1@munin.nbi.dk

On Thu, 12 Jan 2012 18:00:05 -0600, Randy Brukardt wrote:

> "Martin" <martin@thedowies.com> wrote in message 
> news:1d74a186-2599-4de5-af49-ffca2529ea96@do4g2000vbb.googlegroups.com...
>> Now Ada has bitten the bullet and allowed "in out" mode parameters in
>> functions, is it time to allow users to contract the other extreme and
>> allow a function to be declared Pure (no state changes, not even
>> hidden ones)? e.g.
>>
>> package P is
>>   type T is tagged private;
>>   function Pure_F   (Self : T) return Integer
>>      with Pure;
>>   function Impure_F (Self : T) return Integer;
>> private
>>   type T is tagged record
>>      I : Integer := 0;
>>   end record;
>> end P;
>>
>>
>> Functions with a Pure contract would be allowed to call other
>> functions with pure contracts, read values/parameters but promise to
>> change nothing (not even via 'tricks' a la random number generator!!).
> 
> We've argued this for a long time within the ARG, and we haven't been able 
> to get a real consensus. This discussion goes back to Ada 79 (which is even 
> before I got involved in Ada) -- early drafts of Ada had both functions 
> (which were what we now call pure) and value-returning procedures (which 
> were not). The concern was that there was not a clear line between them, and 
> moreover there are many sorts of functions that are "logically" pure but 
> still do change things (the "memo function" being the banner carrier for 
> that idea).

I think that the problem may be resolved by considering the contexts where
the function is pure. There is no absolutely pure functions, any one is
impure because it returns something, pumps stack etc. The result is taken
out of consideration, so are local variables etc. There should be some
syntax for specifying what is not touched at the given level of "purity"
and what is.

A related issue is a requirement that functions impure only in their
results and locals were evaluated at compile time when arguments are
statically known. [Needed for handling dimensioned values and similar
static checks, e.g. matrix dimensions checks etc]

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



  reply	other threads:[~2012-01-13  8:46 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-12 10:44 Pure function aspect? Martin
2012-01-13  0:00 ` Randy Brukardt
2012-01-13  8:45   ` Dmitry A. Kazakov [this message]
2012-01-13 11:01     ` Martin
2012-01-13 17:12       ` Dmitry A. Kazakov
2012-01-13 10:48   ` stefan-lucks
2012-01-14  0:00     ` Randy Brukardt
2012-01-16 10:48       ` Martin
2012-01-19  1:17         ` Randy Brukardt
2012-01-19 10:09           ` Dmitry A. Kazakov
2012-01-13 10:55   ` Martin
replies disabled

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