From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.5-pre1 Path: eternal-september.org!reader02.eternal-september.org!aioe.org!5WHqCw2XxjHb2npjM9GYbw.user.gioia.aioe.org.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Ada syntax questions Date: Sat, 19 Dec 2020 18:49:08 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <5fdbde31$0$6455$426a74cc@news.free.fr> <86im8ylnj4.fsf@stephe-leake.org> <5fdde913$0$3238$426a74cc@news.free.fr> <7a72951a-5a0c-42d6-ad30-357a43883b6fn@googlegroups.com> NNTP-Posting-Host: 5WHqCw2XxjHb2npjM9GYbw.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 X-Notice: Filtered by postfilter v. 0.9.2 Content-Language: en-US Xref: reader02.eternal-september.org comp.lang.ada:60893 List-Id: On 2020-12-19 18:13, Andreas ZEURCHER wrote: > On Saturday, December 19, 2020 at 6:40:28 AM UTC-6, Dmitry A. Kazakov wrote: >> On 2020-12-19 12:50, DrPi wrote: >> >>>> Why would you care? >>> >>> Calling a function can have side effects. Accessing an array or a >>> variable can't have side effects. >> >> Untrue. Both array and variable access have side effects on the >> registers, on the cache, on the process memory paging, in the form of >> exception propagation etc. Even direct effects on the outside world are >> possible when using machine memory load instructions. E.g. on some >> hardware reading memory at the specific address location means physical >> serial input. > > Dmitry, DrPi here is referring to side-effects as viewed from the functional-programming paradigm's perspective. Some programming languages have a "pure" designator (usually the keyword: pure) that assures that this subroutine and all invoked subroutines therein are pure (i.e., have no FP side effects). > > The side effects of which you speak are at the machine-code level: e.g., setting/clearing comparison flag(s), setting/clearing carry flag, setting/clearing overflow/underflow flag(s), evictions from L1/L2/L3 cache, (on RISC processors) latching an address in preparation of a load/store, and so forth. None of these are externally observable side effects from FP's perspective above the machine-code level. DrPi's FP goals are valid. Memory paging is pretty much observable. What you are saying is a question of contracts. The contract must include all effects the user may rely on. The contract of a function may include observable effects or have none (to some extent). If contracts were indeed relevant to the syntax then functions without contracted side effects must have been called using [] instead of (). No? Then it is not about the contracts. >> All these effects are either desired parts of the implementation or else >> bugs to be fixed. If desired, why do you care? >>>> You seem to be implying this is bad; why? >>> >>> Reading the code can't tell you the writer's intentions. >> What intentions? > > The intentions of the Ada programmer to design an overtly FP-pure or either an overtly FP-impure subroutine or an FP-impure subroutine by happenstance. Intentions are constraints expressed by contracts. Everything else is implementation details. Ada programmers are not motivated by pureness of a subroutine. These are totally irrelevant. What is relevant is the strength of the contract. Functions without side effects are preferable just because they have weakest preconditions and strongest postconditions. Side effects weaken postconditions. For the clients these are of no interest, even less to deserve a different syntax. The user must simply obey the contract whatever it be, ignoring the implementation as much as possible. Ada's unified syntax is a great help here. I quite often replace arrays and variables with functions. It would be great if literals were fully equivalent to parameterless functions. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de