From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED.fn3LatRFkm9/xzEj7F2/NQ.user.gioia.aioe.org!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Ada x Datagram Sockets Date: Mon, 11 Feb 2019 15:25:33 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <47f17695-f9a5-4024-b2da-3f13209dc4fd@googlegroups.com> <818f5ff4-f18d-42b8-950d-9b597c012aa4@googlegroups.com> <62406dfb-54c9-4db3-b461-0ad72d4a782c@googlegroups.com> NNTP-Posting-Host: fn3LatRFkm9/xzEj7F2/NQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.5.0 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.9.2 Xref: reader01.eternal-september.org comp.lang.ada:55488 Date: 2019-02-11T15:25:33+01:00 List-Id: On 2019-02-11 14:35, Simon Wright wrote: > "Dmitry A. Kazakov" writes: > >> On 2019-02-10 18:54, Simon Wright wrote: >> >>> A further benefit of using streams was that we were communicating >>> between machines of different endianness, and GNAT contains an >>> optional stream implementation that will transparently convert >>> to/from network byte order. >> >> That does not make much sense. Most protocols of the layers above >> simply ignore that and use the order (encoding, actually) they prefer >> for whatever reason. Furthermore encoding integers is the least >> problem. > > Machine A (a PowerPC) will automatically send the contents of a record > in network byte order. It does not make sense in most cases. The Machine A sends a packet encoded as defined by the protocol. Usually there is no any Ada record type corresponding to the packet, because the semantics of packet sending is not sending a record, but doing some protocol-defined stuff, e.g. subscribe to the MQTT topic XXX using the policy YYY. It is safer and simpler to form the packet in a buffer straight away without any intermediate record types, especially because in most cases you would not be able declare such a record type at all. > A consideration on that project was that the target hardware was all > PowerPC, and conversion load was to be avoided if possible, while the > x86_64 part was all about logging and analysis, and had cycles to spare. There is no conversion at all. You simply encode a packet and decode it. That is it. Ada's machine representation of the types in the application plays no role. >> Anyway, there are two major and quite different cases: piped I/O >> vs. encoding/decoding. You refer to the latter and FIFO is likely the >> former. > > If you're communicating within one program, use an indefinite queue. If > between two programs, I don't see there's a lot of difference really > (OK, if the programs are both on x86_64, doesn't make much sense to > convert the contents to network byte order! which is a disadvantage of > using a modified runtime, of course). Stream is not queue unless you mean a queue of stream elements. I suppose that using a queue of stream elements will inflict too much overhead if you put a stream interface on top of it to be usable. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de