comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Ada syntax questions
Date: Sat, 19 Dec 2020 18:49:08 +0100	[thread overview]
Message-ID: <rrleeh$1rjd$1@gioia.aioe.org> (raw)
In-Reply-To: 7a72951a-5a0c-42d6-ad30-357a43883b6fn@googlegroups.com

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

  reply	other threads:[~2020-12-19 17:49 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-17 22:39 Ada syntax questions DrPi
2020-12-17 23:18 ` Gabriele Galeotti
2020-12-18  8:26 ` Jeffrey R. Carter
2020-12-18  9:18 ` Dmitry A. Kazakov
2020-12-18 16:55 ` Mart van de Wege
2020-12-18 17:38 ` Björn Lundin
2020-12-18 19:35 ` Niklas Holsti
2020-12-20 21:59   ` Keith Thompson
2020-12-22  1:04     ` Randy Brukardt
2020-12-22  8:00       ` Dmitry A. Kazakov
2020-12-23  1:23         ` Randy Brukardt
2020-12-23  8:59           ` Dmitry A. Kazakov
2020-12-24  4:06             ` Randy Brukardt
2020-12-24  9:37               ` Dmitry A. Kazakov
2020-12-22 13:48       ` AdaMagica
2020-12-20 21:59   ` Keith Thompson
2020-12-21  8:08     ` Dmitry A. Kazakov
2020-12-18 23:09 ` Stephen Leake
2020-12-19 11:50   ` DrPi
2020-12-19 12:40     ` Dmitry A. Kazakov
2020-12-19 17:13       ` Andreas ZEURCHER
2020-12-19 17:49         ` Dmitry A. Kazakov [this message]
2020-12-19 18:40           ` Andreas ZEURCHER
2020-12-19 19:37             ` Dmitry A. Kazakov
2020-12-19 22:11               ` Andreas ZEURCHER
2020-12-20  8:47                 ` Dmitry A. Kazakov
2020-12-20 16:53                   ` Andreas ZEURCHER
2020-12-22  0:58                     ` Randy Brukardt
2020-12-22  2:39                       ` Andreas ZEURCHER
2020-12-22 10:05                     ` Stéphane Rivière
2020-12-25  9:34                     ` G.B.
2020-12-19 17:01     ` AdaMagica
2020-12-19 21:51     ` Stephen Leake
2020-12-19 22:20       ` Andreas ZEURCHER
2020-12-20 14:10       ` DrPi
replies disabled

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