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=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,1e369abf7da96fac X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Received: by 10.68.129.169 with SMTP id nx9mr176613pbb.8.1326444366516; Fri, 13 Jan 2012 00:46:06 -0800 (PST) Path: lh20ni176817pbb.0!nntp.google.com!news2.google.com!goblin2!goblin.stu.neva.ru!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Pure function aspect?... Date: Fri, 13 Jan 2012 09:45:46 +0100 Organization: cbb software GmbH Message-ID: <18gmy0hbklhv5.swfwyybigqv2$.dlg@40tude.net> References: <1d74a186-2599-4de5-af49-ffca2529ea96@do4g2000vbb.googlegroups.com> Reply-To: mailbox@dmitry-kazakov.de NNTP-Posting-Host: FbOMkhMtVLVmu7IwBnt1tw.user.speranza.aioe.org Mime-Version: 1.0 X-Complaints-To: abuse@aioe.org User-Agent: 40tude_Dialog/2.0.15.1 X-Notice: Filtered by postfilter v. 0.8.2 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Date: 2012-01-13T09:45:46+01:00 List-Id: On Thu, 12 Jan 2012 18:00:05 -0600, Randy Brukardt wrote: > "Martin" 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