comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Sat, 18 Jun 2016 10:47:47 +0200
Date: 2016-06-18T10:47:47+02:00	[thread overview]
Message-ID: <nk31ru$10pb$1@gioia.aioe.org> (raw)
In-Reply-To: d9d7f8f5-8b72-450b-8152-4b6116c6ce2c@googlegroups.com

On 2016-06-18 10:16, Hadrien Grasland wrote:

> In addition to the benefits you mention, I will also add that a
> language-level implementation can potentially trap blocking system calls
> and substitute them with task switches for latency hiding. It will also
> get wide support from the standard library instead of requiring many
> custom primitives an wrapper, which means more development time to focus
> on the core concurrency model.

It looks like too much burden on the implementation if possible at all.

But certainly, yes, entry calls must be aware of the context when made 
from a co-routine.

Regarding system calls, surely there must be a way to make non-blocking 
system calls looking as if they were blocking. Otherwise the whole idea 
would make no sense at all.

I don't care much about wrappers, since they can be easily done:

    procedure Read (Buffer : in out Stream_Element_Array) is
       Last : Stream_Element_Offset;
    begin
       loop
          Read (File, Buffer, Last); -- Non-blocking
          exit when Last = Buffer'Last;
          accept Reschedule; -- Give up until next time
       end loop;
    end Read;

The co-routine body would simply call Read and get all buffer filled.

A bigger problem is "releasing" a co-routine waiting for an asynchronous 
system call completion without polling. One solution could be events 
(protected objects) associated with the state of the non-blocking exchange:

    procedure Read (Buffer : in out Stream_Element_Array) is
       Last : Stream_Element_Offset;
    begin
       loop
          Read (File, Buffer, Last);
          exit when Last = Buffer'Last;
          File.IO_Event.Signaled; -- "Entry call"
       end loop;
    end Read;

> However, I think that as it stands, we are just about as likely to
> see  it happening in Ada as we are to get lambdas and first-class function
> objects.

Yes, it is difficult to convince. But co-routines do not look like much 
a change since all syntax necessary is basically there. It is semantics 
of entry calls and accept statements which must be attuned.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de


  reply	other threads:[~2016-06-18  8:47 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-17  9:44 RFC: Prototype for a user threading library in Ada Hadrien Grasland
2016-06-17 16:18 ` Niklas Holsti
2016-06-17 16:46   ` Dmitry A. Kazakov
2016-06-18  8:16     ` Hadrien Grasland
2016-06-18  8:47       ` Dmitry A. Kazakov [this message]
2016-06-18  9:17         ` Hadrien Grasland
2016-06-18 11:53           ` Dmitry A. Kazakov
2016-06-20  8:23             ` Hadrien Grasland
2016-06-20  9:22               ` Dmitry A. Kazakov
2016-06-23  1:42       ` Randy Brukardt
2016-06-23  8:39         ` Dmitry A. Kazakov
2016-06-23 22:12           ` Randy Brukardt
2016-06-24  7:34             ` Dmitry A. Kazakov
2016-06-24 23:00               ` Randy Brukardt
2016-06-25  7:11                 ` Dmitry A. Kazakov
2016-06-26  2:02                   ` rieachus
2016-06-26  6:26                     ` Dmitry A. Kazakov
2016-06-24  0:38           ` rieachus
2016-06-25  6:28             ` Dmitry A. Kazakov
2016-06-26  1:34               ` rieachus
2016-06-26  3:21               ` Randy Brukardt
2016-06-26  6:15                 ` Dmitry A. Kazakov
2016-06-28 20:44                   ` Anh Vo
2016-07-02  4:13                   ` Randy Brukardt
2016-07-02 10:25                     ` Dmitry A. Kazakov
2016-07-05 21:53                       ` Randy Brukardt
2016-07-06  9:25                         ` Dmitry A. Kazakov
2016-07-07  0:32                           ` Randy Brukardt
2016-07-07  6:08                             ` Niklas Holsti
2016-07-08  0:03                               ` Randy Brukardt
2016-07-08  7:32                                 ` Dmitry A. Kazakov
2016-07-11 19:40                                   ` Randy Brukardt
2016-07-12  8:37                                     ` Dmitry A. Kazakov
2016-07-12 21:31                                       ` Randy Brukardt
2016-07-08 20:17                                 ` Niklas Holsti
2016-06-24 21:06         ` Hadrien Grasland
2016-06-26  3:09           ` Randy Brukardt
2016-06-26  6:41             ` Dmitry A. Kazakov
2016-07-02  4:21               ` Randy Brukardt
2016-07-02 10:33                 ` Dmitry A. Kazakov
2016-07-05 21:24                   ` Randy Brukardt
2016-07-06 13:46                     ` Dmitry A. Kazakov
2016-07-07  1:00                       ` Randy Brukardt
2016-07-07 14:23                         ` Dmitry A. Kazakov
2016-07-07 23:43                           ` Randy Brukardt
2016-07-08  8:23                             ` Dmitry A. Kazakov
2016-07-11 19:44                               ` Randy Brukardt
2016-06-26  9:09             ` Hadrien Grasland
2016-07-02  4:36               ` Randy Brukardt
2016-07-02  5:30                 ` Simon Wright
2016-07-05 21:29                   ` Randy Brukardt
2016-07-02 11:13                 ` Hadrien Grasland
2016-07-02 13:18                   ` Dmitry A. Kazakov
2016-07-02 16:49                     ` Hadrien Grasland
2016-07-02 21:33                       ` Niklas Holsti
2016-07-03 20:56                         ` Hadrien Grasland
2016-07-02 17:26                   ` Niklas Holsti
2016-07-02 21:14                   ` Niklas Holsti
2016-07-03  7:42                     ` Hadrien Grasland
2016-07-03  8:39                       ` Dmitry A. Kazakov
2016-07-03 21:15                         ` Hadrien Grasland
2016-07-04  7:44                           ` Dmitry A. Kazakov
2016-07-05 21:38                   ` Randy Brukardt
2016-06-21  2:40     ` rieachus
2016-06-21  7:34       ` Dmitry A. Kazakov
2016-06-18  7:56   ` Hadrien Grasland
2016-06-18  8:33 ` Hadrien Grasland
2016-06-18 11:38 ` Hadrien Grasland
2016-06-18 13:17   ` Niklas Holsti
2016-06-18 16:27   ` Jeffrey R. Carter
2016-06-20  8:42 ` Hadrien Grasland
2016-07-10  0:45 ` rieachus
replies disabled

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