comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Advice, tasking and hardware
Date: Fri, 27 May 2016 22:27:21 +0200
Date: 2016-05-27T22:27:21+02:00	[thread overview]
Message-ID: <niaaji$1nar$1@gioia.aioe.org> (raw)
In-Reply-To: cf38020c-a34c-4c8d-b436-5e622100e58b@googlegroups.com

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.

>> 6. Task entries cannot return unconstrained objects.
>
> This can be worked around:
>    We can add to the previous task the following:
> 	    Entry Data( Item : out Natural );
> 	    Entry Data( Item : out String );

This is a very low-level and very fragile design. Consider ensuring that 
nothing comes between querying the length and the body that could change 
the string. You start doing that with entry barriers risking running 
into a deadlock. Then consider a possibility that the caller of a 
get-length request dies prematurely, or that another task steals the 
string body and so on.

Note that the "discussion" started around the claim that design based on 
semaphore is more low-level than one based on monitor (the task serves 
as a monitor).

(There was a reason why protected objects were introduced in Ada 95)

P.S. The Ada-way of returning string is this:

    entry Get_Text (Text : in out String; Last : out Integer);

I am using a bit more general:

    entry Get_Text (Text : in out String; Pointer : in out Integer);

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


  reply	other threads:[~2016-05-27 20: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 [this message]
2016-05-27 22:27           ` Randy Brukardt
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