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
next prev 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