From: dmitry@elros.cbb-automation.de (Dmitry A. Kazakov)
Subject: Re: Lazy Evaluation [Side-Effects in Functions]
Date: Wed, 07 Nov 2001 09:28:56 GMT
Date: 2001-11-07T09:28:56+00:00 [thread overview]
Message-ID: <3be8f660.2085921@News.CIS.DFN.DE> (raw)
In-Reply-To: 9s941c$11mrei$2@ID-25716.news.dfncis.de
On Tue, 6 Nov 2001 16:18:12 -0000, "Nick Roberts"
<nickroberts@adaos.worldonline.co.uk> wrote:
>"Dmitry A. Kazakov" <dmitry@elros.cbb-automation.de> wrote in message
>news:3be7a31d.1736453@News.CIS.DFN.DE...
>above? The answer is no.
>> ...
>> P.S. A comment about computation order. I am not sure, but maybe it
>> would be worth to think about introducing lazy parameters (Algol's by
>> name). Ada already has them hard-wired in "and then" and "or else".
>> The order lazy parameters are evaluated is obviously defined by the
>> implementation of the subroutine, thus the above problems will
>> disappear, or better to say, become the responsibility of the
>> implementation. In your example "&" should have the second parameter
>> lazy, so
>>
>> Decode(Data(1..4)) & Decode(Data(5..8));
>>
>> would mean: evaluate Decode(Data(1..4)); call "&", which internally
>> calls Decode(Data(5..8)).
>
>Briefly, the combination of lazy evaluation and side-effects, as such, would
>be rather like the combination of a keg of TNT and a blowtorch.
>
>The problem of side-effects in Ada would be largely solved by fixing the
>order in which arguments are evaluated (e.g. strictly in the order they are
>declared) for all functions. But this would be a pity in that it would
>significantly hamper many compilers' efforts to optimise a lot of ordinary
>code.
Yes. Then fixing the order does not solve another problem of
side-effects: when same objects are visible through different
arguments. The problem is of course in-out parameters per se. To the
list of their "crimes": LSP violation by generalization or
specialization; interesting effects in by-value vs. by-reference
parameter passing etc.
>Lazy evaluation is an interesting idea. How about:
>
> function Sin (X: delay in Float) return Float;
>
>where the 'delay' means that what is passed into Sin is an access value to a
>temporary routine (X'Computation) that computes the required value of X. In
>the body of Sin, a flag X'Computed is set False, and any reference to X
>either: if X'Computed is False, causes a call to the temporary routine,
>places the result into a temporary store for X, and sets X'Computed to True;
>if X'Computed is True, retrieves the value of X from its temporary store.
>Hey presto! Lazy evaluation. "and then" and "or else" could become first
>class citizens.
Something like this. Maybe pragma Volatile (X) should ensure that X is
computed each time it is accessed. Otherwise, X is computed only once.
Then (a crazy idea), it would be nice to have an ability for a lazy
parameter to evaluate discriminants (and type tags) separately from
the value. I do not know whether it possible, but it could solve the
"problem of measurement units". The type of dimensioned values will
have a discriminant specifying the unit of measure. Being static (in
most cases) it can be evaluated statically (for inlined subroutines),
thus units checks can be efficiently removed by the compiler.
>The access value X'Computation would be subject to the same accessibility
>rules as any other access (-to-subprogram) value. This business is, I guess,
>closely related to that of lambdas etc.
>
>I not actually saying that I like this idea, by the way, just that it's
>intriguing.
It would be a dangerous stuff in right hands (:-)). Then I think to
get pragma Inlined working efficiently for subroutines with lazy
parameters would be not very easy.
Regards,
Dmitry Kazakov
next prev parent reply other threads:[~2001-11-07 9:28 UTC|newest]
Thread overview: 162+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-11-02 3:56 List container strawman Ted Dennison
2001-11-02 4:20 ` James Rogers
2001-11-02 14:23 ` Ted Dennison
2001-11-02 14:38 ` Preben Randhol
2001-11-02 15:15 ` Larry Kilgallen
2001-11-02 4:35 ` Eric Merritt
2001-11-02 15:46 ` Ted Dennison
2001-11-02 7:28 ` Ehud Lamm
2001-11-02 14:57 ` Marin David Condic
2001-11-02 15:57 ` Francisco Javier Loma Daza
2001-11-02 16:28 ` Marin David Condic
2001-11-02 17:08 ` Ted Dennison
2001-11-02 15:06 ` Ted Dennison
2001-11-02 15:32 ` Marin David Condic
2001-11-02 16:33 ` Ted Dennison
2001-11-02 16:43 ` Marin David Condic
2001-11-02 22:51 ` Jeffrey Carter
2001-11-03 0:24 ` Matthew Heaney
2001-11-03 2:21 ` Jeffrey Carter
2001-11-03 22:51 ` Rosen Trick [List container strawman] Nick Roberts
2001-11-04 13:07 ` Robert Dewar
2001-11-04 17:17 ` Side-Effects in Functions [Rosen Trick] Nick Roberts
2001-11-05 2:46 ` Robert Dewar
2001-11-05 7:26 ` pete
2001-11-05 10:29 ` Dmitry A. Kazakov
2001-11-05 11:19 ` pete
2001-11-05 14:59 ` Dmitry A. Kazakov
2001-11-05 15:21 ` Preben Randhol
2001-11-05 16:04 ` Ted Dennison
2001-11-05 16:33 ` Dmitry A. Kazakov
2001-11-05 17:42 ` Warren W. Gay VE3WWG
2001-11-05 18:11 ` Preben Randhol
2001-11-06 8:38 ` Dmitry A. Kazakov
2001-11-06 9:31 ` tgingold
2001-11-06 0:10 ` Nick Roberts
2001-11-06 9:30 ` Dmitry A. Kazakov
2001-11-06 16:18 ` Lazy Evaluation [Side-Effects in Functions] Nick Roberts
2001-11-07 3:42 ` Robert Dewar
2001-11-07 4:42 ` Darren New
2001-11-07 11:54 ` Robert Dewar
2001-11-07 13:32 ` Florian Weimer
2001-11-07 13:24 ` Jean-Marc Bourguet
2001-11-09 18:06 ` Ted Dennison
2001-11-09 18:27 ` M. A. Alves
2001-11-11 20:13 ` Georg Bauhaus
2001-12-06 17:47 ` Harri J Haataja
2001-11-07 9:28 ` Dmitry A. Kazakov [this message]
2001-11-06 20:08 ` Side-Effects in Functions [Rosen Trick] Florian Weimer
2001-11-06 22:48 ` Nick Roberts
2001-11-07 10:46 ` Florian Weimer
2001-11-05 13:56 ` Robert Dewar
2001-11-05 16:08 ` Ted Dennison
2001-11-05 17:44 ` Warren W. Gay VE3WWG
2001-11-05 15:56 ` Ted Dennison
2001-11-05 18:46 ` Nick Roberts
2001-11-08 11:51 ` Georg Bauhaus
2001-11-16 0:31 ` List container strawman Vincent Marciante
2001-11-05 15:10 ` Marin David Condic
2001-11-05 18:31 ` Ted Dennison
2001-11-05 19:09 ` Marin David Condic
2001-11-05 21:23 ` Ted Dennison
2001-11-07 19:27 ` Stephen Leake
2001-11-02 18:11 ` Mark Johnson
2001-11-02 18:46 ` Marin David Condic
2001-11-02 19:21 ` Larry Kilgallen
2001-11-03 22:30 ` Nick Roberts
2001-11-02 16:26 ` Ted Dennison
2001-11-02 16:36 ` Marin David Condic
2001-11-02 19:31 ` Ted Dennison
2001-11-02 17:49 ` Jeffrey Carter
2001-11-08 10:34 ` Ehud Lamm
2001-11-08 18:53 ` Better Finalisation [List container strawman] Nick Roberts
2001-11-09 13:36 ` Robert Dewar
2001-11-09 15:04 ` Florian Weimer
2001-11-10 0:36 ` Nick Roberts
2001-11-09 15:16 ` Ted Dennison
2001-11-09 17:30 ` Better control of assignment Jeffrey Carter
2001-11-10 0:32 ` Nick Roberts
2001-11-10 22:27 ` Jeffrey Carter
2001-11-13 6:36 ` Craig Carey
2001-11-13 6:39 ` Craig Carey
2001-11-13 8:53 ` Craig Carey
2001-11-14 9:42 ` Craig Carey
2001-11-09 14:49 ` List container strawman Ted Dennison
2001-11-09 16:12 ` Ehud Lamm
2001-11-09 17:12 ` Marin David Condic
2001-11-09 18:11 ` Ted Dennison
2001-11-09 18:42 ` Matthew Heaney
2001-11-10 17:54 ` Simon Wright
[not found] ` <3BE29AF4.80804@telepath.com>
2001-11-02 13:14 ` Ted Dennison
2001-11-02 13:31 ` Larry Kilgallen
2001-11-02 15:09 ` Ted Dennison
2001-11-02 15:13 ` Preben Randhol
2001-11-02 20:48 ` David Starner
2001-11-02 22:49 ` Larry Kilgallen
2001-11-02 17:44 ` Jeffrey Carter
2001-11-02 20:07 ` Ted Dennison
2001-11-02 23:19 ` Jeffrey Carter
2001-11-03 6:56 ` Ted Dennison
2001-11-03 19:22 ` Jeffrey Carter
2001-11-04 18:58 ` Darren New
2001-11-04 19:40 ` Larry Kilgallen
2001-11-04 20:49 ` Darren New
2001-11-07 19:07 ` ramatthews
2001-11-08 0:04 ` Darren New
2001-11-08 4:50 ` Jeffrey Carter
2001-11-08 23:26 ` ramatthews
2001-11-09 18:00 ` Ted Dennison
2001-11-09 18:13 ` Jean-Marc Bourguet
2001-11-09 18:55 ` Ted Dennison
2001-11-10 1:48 ` Nick Roberts
2001-11-10 17:04 ` Ted Dennison
2001-11-10 20:59 ` Nick Roberts
2001-11-10 23:17 ` Larry Hazel
2001-11-11 3:27 ` Nick Roberts
2001-11-12 18:39 ` Darren New
2001-11-13 0:35 ` Nick Roberts
2001-11-10 19:36 ` Ehud Lamm
2001-11-10 20:15 ` Nick Roberts
2001-11-09 19:27 ` Larry Kilgallen
2001-11-09 20:03 ` Stephen Leake
2001-11-09 21:05 ` Ted Dennison
2001-11-09 22:42 ` Larry Kilgallen
2001-11-10 4:52 ` Nick Roberts
2001-11-10 20:24 ` ramatthews
2001-11-05 19:28 ` Ted Dennison
2001-11-05 19:42 ` Jean-Marc Bourguet
2001-11-05 20:40 ` Ted Dennison
2001-11-05 20:24 ` Darren New
2001-11-05 20:45 ` Ted Dennison
2001-11-05 17:21 ` List container strawman; Construct alternatives Stephen Leake
2001-11-03 7:42 ` List container strawman Simon Wright
2001-11-05 14:00 ` Stephen Leake
2001-11-08 11:17 ` Simon Wright
2001-11-13 16:29 ` Stephen Leake
2001-11-13 22:43 ` Jeffrey Carter
2001-11-13 22:48 ` Jeffrey Carter
2001-11-14 3:46 ` Nick Roberts
2001-11-15 10:23 ` Ehud Lamm
2001-11-14 14:50 ` Marin David Condic
2001-11-14 16:53 ` Jeffrey Carter
2001-11-14 17:59 ` Marin David Condic
2001-11-15 3:33 ` Nick Roberts
2001-11-15 15:10 ` Marin David Condic
2001-11-16 1:29 ` Nick Roberts
2001-11-16 16:03 ` Marin David Condic
2001-11-16 20:19 ` Nick Roberts
2001-11-15 18:08 ` Matthew Heaney
2001-11-02 14:49 ` Marin David Condic
2001-11-02 15:15 ` Ted Dennison
2001-11-02 15:37 ` Marin David Condic
2001-11-02 16:49 ` Ted Dennison
2001-11-02 17:09 ` Marin David Condic
2001-11-04 0:10 ` Nick Roberts
2001-11-03 23:41 ` Nick Roberts
2001-11-02 17:02 ` David Botton
2001-11-02 17:55 ` David Botton
2001-11-03 19:22 ` Nick Roberts
2001-11-08 14:57 ` M. A. Alves
2001-11-09 2:00 ` Jeffrey Carter
2001-11-09 18:31 ` Ted Dennison
2001-11-10 19:56 ` Ehud Lamm
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox