comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Tue, 12 Jul 2016 16:31:54 -0500
Date: 2016-07-12T16:31:54-05:00	[thread overview]
Message-ID: <nm3nk7$cre$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: nm2a9s$pkr$1@gioia.aioe.org

>Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
>news:nm2a9s$pkr$1@gioia.aioe.org...
> On 2016-07-11 21:40, Randy Brukardt wrote:
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>> news:nlnl0b$93q$1@gioia.aioe.org...
...
>> Your definition of reasonable and mine are obviously incompatible. 
>> Hardware
>> interrupts are evil; possibly a necessary evil but still evil and one 
>> wants
>> to minimize them as much as possible. Obviously you disagree.
>
> What is evil in hardware interrupts? It is a piece of hardware serving 
> certain purpose. There is no moral component there from the software 
> developing POV, especially because no alternative solution ever existed.

Asynchronous actions are evil. (Necessary in some cases, but evil.) They 
essentially force all code to be concurrency-aware, something that neither 
programming languages nor humans have done very well.

The usual solution to that is to have handlers that do nothing but set an 
atomic object, but of course the program then essentially is the same thing 
as polling (or mutex waiting, which is essentially the same thing).

...
>> I agree that having to put in such choices manually isn't a good idea, 
>> but I
>> wasn't suggesting that (outside of user-written I/O that doesn't use
>> language-defined or implementation-defined libraries). The compiler would 
>> do
>> it at appropriate points.
>
> How is that different then? If the compiler inserts re-scheduling code 
> after each few instructions, that logically is *exactly* same as 
> re-scheduling at timer interrupts, except than incredibly inefficient. 
> This would be nothing but poor-man's preemptive scheduling.

Not "every few instructions"; just a handful of strategic places. And the 
idea of course is that it works enough like preemptive scheduling without 
the excessive costs of preemption. So I think "poor-man's preemptive 
scheduling" would be a complement (as a "poor-man" has to do more with 
less - I think that's a virtue :-).

> My point was that we need non-preemptive user-controlled (explicit, 
> cooperative) scheduling of certain tasks on top of the standard schema. 
> And this looks much simpler to implement than code insertions you 
> suggested.

Have you ever tried to implement this sort of stuff?

For Janus/Ada, implementing some sort of separate co-routines would 
definitely require rewriting 1/3rd of the front-end from scratch (everything 
that uses local variables and parameters would have to be changed to avoid 
the task stack; probably ), and potentially would require major changes in 
the back-end as well. Not to mention whatever changes are made to the task 
supervisor.

A "passive" aspect would only need changes to the task supervisor (it would 
have no effect on the generated code). The scheme I'm considering would 
require an extra code insertion into the stack check subprogram (trivial) 
and an extra call at "end loop" (also pretty trivial). The work needed is 
10% of supporting co-routines (or full pre-emption, for that matter).

>>> It is just like arguing for return codes over exceptions.
>>
>> Given that almost none of this is visible to the Ada user, I don't see 
>> the
>> analogy. (And certainly, return codes are much more efficient than
>> exceptions; the problem is the distribution of concerns. That's not
>> happening here.)
>
> The analogy is that instead of signaling an event (exception, scheduling 
> event) at its source with the advantage of hardware acceleration, you poll 
> for the event state all over the code. Doing that you lose hardware 
> support and you have a huge problem with third party libraries that does 
> succumb to your schema.

I prefer to put as little trust as absolutely necessary into anything that I 
don't have direct control of. That means hardware, third-party software, 
etc. I suspect I'd be happiest on a bare RISC machine without any 
interrupts. (I'd also probably be alone on that machine, which would also 
make me happy other than in the wallet. :-)

                                        Randy.


  reply	other threads:[~2016-07-12 21:31 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
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 [this message]
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