comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Better way to fill Storage_IO?
Date: Mon, 17 May 2021 22:20:11 +0200	[thread overview]
Message-ID: <s7uj5p$10p7$1@gioia.aioe.org> (raw)
In-Reply-To: lymtstxjdv.fsf@pushface.org

On 2021-05-17 21:14, Simon Wright wrote:
> Michael Hardeman <mhardeman25@gmail.com> writes:
> 
>> So I've been messing around with the new Ada 2020 package
>> Ada.Streams.Storage.Bounded/Unbounded; and if I'm understand it
>> correctly it allows you to treat your program's memory like a stream
>> without having to open file descriptors (which should make it
>> faster?). That seems like a powerful abstraction to me and a great
>> addition to the language.

1. It was always possible, since Ada 95, actually. So it is not that 
great addition.

2. The package as described is not a replacement for I/O, because it 
lacks blocking/synchronization and because it does not work between 
processes. E.g. at the end of the stream Read must rather block for an 
incoming Write. Both are quite possible to implement though.

A great addition would be properly tagged protected objects and tasks. A 
blocking stream cannot support timed entry call syntax like this:

    select
       S := String'Input (Pipe'Access); -- This is not Ada!
    or delay 1.0;
       raise Timed_Out;
    end select;

And note another problem. Entries do not work with indefinite objects. 
You cannot return String from an entry call.

And yet another problem, you cannot use returned objects in many places, 
like in an entry call above.

>> I was wondering if we could find a better way to fill the stream other
>> than writing the variables into it? Can anyone figure out a good way
>> to just stream a variable's bytes directly?

Allocators, of course. I am using both allocators and memory-mapped 
streams (though of a greater variety, e.g. for blocked exchange, 
encryption, interporcess communication).

> This *is* the way to just stream the variable's bytes directly. What
> sort of syntax were you hoping for?

Both allocators and streams require explicit specification of the type. 
Clearly, that is a way around multiple dispatch, but it is way too 
heavy. Access to stream is no more necessary in 'Input. It was not 
necessary when it was introduced in Ada 95. The Rosen's trick allows 
circumvent in- parameter modes, when necessary.

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

  parent reply	other threads:[~2021-05-17 20:20 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-17 18:44 Better way to fill Storage_IO? Michael Hardeman
2021-05-17 19:14 ` Simon Wright
2021-05-17 19:23   ` Michael Hardeman
2021-05-18 20:39     ` Simon Wright
2021-05-19  6:24       ` Dmitry A. Kazakov
2021-05-19  7:17       ` J-P. Rosen
2021-05-19  8:26         ` Björn Lundin
2021-05-19 19:25           ` J-P. Rosen
2021-05-19 19:58             ` Dmitry A. Kazakov
2021-05-19 20:18             ` Björn Lundin
2021-05-20  5:38               ` Niklas Holsti
2021-05-20  6:50                 ` J-P. Rosen
2021-05-20 22:24                   ` Randy Brukardt
2021-05-19 15:39         ` Simon Wright
2021-05-17 20:20   ` Dmitry A. Kazakov [this message]
2021-05-17 20:48     ` Michael Hardeman
2021-05-18 14:00       ` Per Sandberg
2021-05-18  9:08     ` J-P. Rosen
2021-05-18 10:10       ` Jeffrey R. Carter
2021-05-18 16:50 ` Shark8
replies disabled

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