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=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: A few questions Date: Sat, 14 Nov 2015 12:42:28 +0100 Organization: cbb software GmbH Message-ID: <14s9163zfvsqb$.2t21ye88a2t5$.dlg@40tude.net> References: <1dolqizyi8gxi.t3173bhifuu1.dlg@40tude.net> <1705bpj6jrld0.1lc44o5yo6bj7$.dlg@40tude.net> Reply-To: mailbox@dmitry-kazakov.de NNTP-Posting-Host: j6IQVb9uobzjXrpQLDU2rQ.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: 40tude_Dialog/2.0.15.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:28363 Date: 2015-11-14T12:42:28+01:00 List-Id: On Fri, 13 Nov 2015 16:15:01 -0600, Randy Brukardt wrote: > "Dmitry A. Kazakov" wrote in message > news:1705bpj6jrld0.1lc44o5yo6bj7$.dlg@40tude.net... >> On Fri, 13 Nov 2015 11:52:29 -0600, Randy Brukardt wrote: > ... >>> And if you did that, there is >>> no problem implementing this in the existing Ada, even as you suggest. >> >> I am not sure about that. > > I am. :-) > > You'd probably keep some state in the iterator object (some access to the > file, at a minimum, possibly a buffer). The "cursor" would be the character. > Each call to Next would put the following character into the "cursor". > Easy-peasy. :-) It would be nice to see a demonstration for iterating lines of a text file... (:-)) >>>>> An array is surely >>>>> a container, and we got along just fine for 30 years without being able >>>>> to iterate elements of arrays. >>>> >>>> Not every container is an array. There are lots of containers which >>>> semantically have no index. >>> >>> Then provide an iterator implementation where the cursor is an access to >>> the element. >> >> Why do I need extra data types, bad types as they involve pointers? > > An iterator is an extra data type. And you surely don't need to involve > pointers, if copying the element is OK. And a pointer to the container. >>> That's the Bag arrgument again. I think that particular data structure is a >>> fraud, because it cannot be created in practice -- plus you have to have >>> some sort of access to the elements, so you end up with a cursor of some >>> sort anyway. >> >> No way. The bag is a set that only supports insertion and iteration. >> Nothing more. It is very useful, e.g. to hold strong references to >> allocated data. References are thrown into a bag. At some point the bag is >> iterated and all references invalidated releasing resources. > > Your description points out the problem: it's "a set", at which point a set > implementation is appropriate. And the implementation is identical to any > other set, so there is almost no value to having a separate bag > implementation (it provides no performance improvements over an ordered set, > for instance). A bag need not to be sorted, no overhead to keep the order, no need for elements to have "=" and "<". > Whether its useful or not is irrelevant -- it is indistiguishable from any > other set (the extra operations having no effect or overhead if not used). It is. The implementation will likely choose a singly linked list of element buckets. > So there is no real value to having a separate Bag abstraction. Even if the implementation were same, abstraction is called abstraction because it is not implementation. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de