From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Advice, tasking and hardware
Date: Fri, 27 May 2016 17:27:12 -0500
Date: 2016-05-27T17:27:12-05:00 [thread overview]
Message-ID: <niahk0$6vm$1@loke.gir.dk> (raw)
In-Reply-To: niaaji$1nar$1@gioia.aioe.org
"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
news:niaaji$1nar$1@gioia.aioe.org...
> On 2016-05-27 21:13, Shark8 wrote:
>> On Friday, May 27, 2016 at 1:50:50 AM UTC-6, Dmitry A. Kazakov wrote:
>>> 5. Tasks entries have parameter passing problems. If you don't handle
>>> everything in the rendezvous in order to release the caller as soon as
>>> possible, you need to copy parameters and store them locally. The design
>>> of the select statement prevents doing this in a structured way. E.g.
>>>
>>> select
>>> accept String_Call (Text : String) do
>>> Local_Text := Text; -- Accept scope
>>> end;
>>> declare -- Handler's scope
>>> Local_Text : String -- This does not work!
>>> begin
>>> -- Process Local_Text
>>> end;
>>> or accept ...
>>
>> Pretty much a non-problem in Ada 2012:
>>
>> package Example is
>>
>> Task Text_IO is
>> Entry Get( Data : String );
>> Entry Put;
>> Entry Done;
>> End Text_IO;
>>
>> end Example;
>>
>> package body Example is
>>
>> Task Body Text_IO is
>> Package String_Holder is new Ada.Containers.Indefinite_Holders(
>> Element_Type => String );
>
> That is no solution. You still have to move entry-specific local data to
> the task-wide scope, which was the main point of being unstructured.
>
> And you certainly don't want pool-allocated stuff in drivers.
> Finally, this is no different from Unbounded_String.
Sure, if the only unconstrained type you ever use is a String. The
Indefinite_Holders solution works for any unconstrained type, not just
String.
And no one (I hope!) is putting tasks in drivers in the first place; one
wants as little as possible in OS drivers, because they necessarily are
outside of the control of the OS (written without the standards used for the
OS, etc.) The caller of the driver needs to manage concurrency. So how one
writes tasks isn't particularly relevant to writing drivers. (Whether or not
the OS should avoid pool allocation is a different question altogether...)
Aside: I get the feeling that the term "drivers" has been totally corrupted
in recent systems, including all kinds of higher-level junk that belongs to
the OS. So we might be talking about different things.
Randy.
next prev parent reply other threads:[~2016-05-27 22:27 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-25 21:24 Advice, tasking and hardware patrick
2016-05-26 1:09 ` Jeffrey R. Carter
2016-05-26 8:13 ` Simon Wright
2016-05-26 7:26 ` Dmitry A. Kazakov
2016-05-26 16:41 ` patrick
2016-05-26 17:56 ` Dmitry A. Kazakov
2016-05-26 20:35 ` Jeffrey R. Carter
2016-05-26 19:35 ` Jeffrey R. Carter
2016-05-26 20:51 ` patrick
2016-05-27 7:50 ` Dmitry A. Kazakov
2016-05-27 18:00 ` Simon Wright
2016-05-27 19:06 ` Jeffrey R. Carter
2016-05-27 22:05 ` Randy Brukardt
2016-05-27 23:09 ` Jeffrey R. Carter
2016-05-27 19:13 ` Shark8
2016-05-27 20:27 ` Dmitry A. Kazakov
2016-05-27 22:27 ` Randy Brukardt [this message]
2016-05-28 6:49 ` Dmitry A. Kazakov
2016-05-28 14:38 ` Shark8
2016-05-28 15:45 ` Dmitry A. Kazakov
2016-05-28 0:25 ` rieachus
2016-05-28 1:57 ` patrick
2016-05-28 4:13 ` Jeffrey R. Carter
2016-06-01 14:37 ` rieachus
2016-06-01 19:09 ` Dmitry A. Kazakov
2016-06-06 3:33 ` rieachus
2016-06-06 7:18 ` Dmitry A. Kazakov
2016-06-07 16:53 ` rieachus
2016-06-07 20:21 ` Dmitry A. Kazakov
2016-06-08 4:06 ` rieachus
2016-06-08 7:29 ` Dmitry A. Kazakov
2016-06-08 12:56 ` rieachus
2016-06-08 0:19 ` Dennis Lee Bieber
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox