comp.lang.ada
 help / color / mirror / Atom feed
From: "G.B." <bauhaus@notmyhomepage.invalid>
Subject: Re: Generators/coroutines in future Ada?
Date: Wed, 12 Jul 2017 08:35:03 +0200
Date: 2017-07-12T08:35:03+02:00	[thread overview]
Message-ID: <ok4fne$j41$1@dont-email.me> (raw)
In-Reply-To: <ok3c7e$2bd$1@gioia.aioe.org>

On 11.07.17 22:25, Dmitry A. Kazakov wrote:
> On 2017-07-11 21:22, J-P. Rosen wrote:
>> Le 11/07/2017 à 20:36, Victor Porton a écrit :
>>> This state also includes the point of execution (like "We are in the second
>>> loop in its second operator.")
>>>
>>>> This can easily be achieved with a function within a package, where the
>>>> package serves to protect and hide the function's state.
>>> Ada currently has no support to save such (point of execution) states.
>> It has. Make your generator a task, and have an accept when the data is
>> ready, which can be nested as deep as you want in any construct.
>>
>> A task is a perfect abstraction for a thread of control that maintains
>> its own execution state!
>
> Except that no control is required.
>
> I don't understand what is wrong with:
>
>    type Stateful is limited private;
>    function Generate (X : not null access Stateful) return Things;

Arguably, first, a "function" lacks query/command separation:

    type Stateful is limited interface;
    function Current (x : Stateful) return Thing;  -- (*)
    procedure Next (x : in out Stateful);

If, then, so-called "elegance" of side-effect generating functions
(or of some equivalent operator) is required for reasons of
socially acceptable expression, to make generators visible,
the above pattern should be integrated with some special iteration
scheme like Ada now has in "for ... of ... loop".

Not surprisingly, I think, Icon's generators are available to
use in while-loops that look perfectly ordinary. If Ada requires
generators to be more explicit:

    G     : Stateful := Strings.Find
               (Subject => "...",
               Pattern => "___");

    while X of G with condition (X) loop    -- not Ada
       ...
    end loop;

"while ... of ... with" then requires G to be a Stateful.
Presence of special syntax is, as previously, HOL.

__
(*) Only if the type is special this can make any sense.
E.g., calling Current twice should raise an exception.
That's unlikely to happen if there is special Ada syntax tied
to Stateful, hence "while ... of ... with".


  parent reply	other threads:[~2017-07-12  6:35 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-09 20:19 Generators/coroutines in future Ada? Victor Porton
2017-07-09 21:28 ` Dennis Lee Bieber
2017-07-09 23:56   ` Victor Porton
2017-07-10  7:33   ` Dmitry A. Kazakov
2017-07-10 13:38 ` Victor Porton
2017-07-10 17:01   ` Paul Rubin
2017-07-10 21:24     ` Victor Porton
2017-07-12 17:09       ` Paul Rubin
2017-07-12 17:39         ` Victor Porton
2017-07-13  6:35           ` Paul Rubin
2017-07-11  9:42   ` J-P. Rosen
2017-07-11 12:52     ` Victor Porton
2017-07-11 13:01       ` Victor Porton
2017-07-11 13:26         ` J-P. Rosen
2017-07-11 16:04           ` Dennis Lee Bieber
2017-07-11 16:59           ` Dmitry A. Kazakov
2017-07-11 19:52             ` Pascal Obry
2017-07-11 20:18               ` Dmitry A. Kazakov
2017-07-11 18:36           ` Victor Porton
2017-07-11 19:22             ` J-P. Rosen
2017-07-11 20:25               ` Dmitry A. Kazakov
2017-07-11 23:19                 ` Victor Porton
2017-07-12  4:54                   ` J-P. Rosen
2017-07-12 13:07                     ` Victor Porton
2017-07-12 13:38                       ` Dmitry A. Kazakov
2017-07-12  5:35                   ` Randy Brukardt
2017-07-12  7:27                     ` Dmitry A. Kazakov
2017-07-12 22:47                     ` Shark8
2017-07-16 13:11                       ` Robert Eachus
2017-07-17 23:54                       ` Randy Brukardt
2017-07-18  7:38                         ` Dmitry A. Kazakov
2017-07-12  7:19                   ` Dmitry A. Kazakov
2017-07-12  6:35                 ` G.B. [this message]
2017-07-12  7:34                   ` Dmitry A. Kazakov
2017-07-12 20:49                     ` G.B.
2017-07-13  8:18                       ` Dmitry A. Kazakov
2017-07-12 17:34           ` Paul Rubin
2017-07-11 19:27         ` Simon Wright
2017-07-12  5:42     ` darkestkhan
2017-07-12  8:57     ` Maciej Sobczak
replies disabled

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