[squeak-dev] The Inbox: Collections-ct.950.mcz

Thiede, Christoph Christoph.Thiede at student.hpi.uni-potsdam.de
Wed Jun 30 12:44:29 UTC 2021


Hi Marcel,


> Hmm... I would prefer to just patch Generator instead of Stream:

Not convinced. :-) As far as I understand the general protocol of Streams, #next is expected to answer either the next element, if any, or otherwise, nil. With this knowledge, Stream >> #take: is just erroneous because it will not honor the situation in which the receiver has fewer elements than requested. IMO correctness is more important than optimization.

Nevertheless, I see that for ReadStreams, we can indeed optimize #take:. We just need to map ReadStream >> #take: to #next:, which - unlike its superclass - will not answer more elements than available. Then it should be at least as fast as in the current Trunk.

Do you think this would be the right approach? Shall I upload a new inbox version for this? :-)

Best,
Christoph

________________________________
Von: Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im Auftrag von Taeumel, Marcel
Gesendet: Mittwoch, 30. Juni 2021 11:06:21
An: squeak-dev
Betreff: Re: [squeak-dev] The Inbox: Collections-ct.950.mcz

Hmm... I would prefer to just patch Generator instead of Stream:

s := self environment allClasses readStream.
[s reset; take: 3000] bench

AFTER: '5,700 per second. 175 microseconds per run. 7.59848 % GC time.'
BEFORE: '143,000 per second. 6.99 microseconds per run. 33.90644 % GC time.'

Best,
Marcel

Am 30.06.2021 01:06:49 schrieb commits at source.squeak.org <commits at source.squeak.org>:

A new version of Collections was added to project The Inbox:
http://source.squeak.org/inbox/Collections-ct.950.mcz

==================== Summary ====================

Name: Collections-ct.950
Author: ct
Time: 30 June 2021, 1:06:39.38741 am
UUID: 58b871bc-ace9-184b-8e98-305453096350
Ancestors: Collections-mt.945

Fixes Stream >> #take:. Unlike in #any:, we must not return nil values from #next here but the enumeration earlier. See CollectionsTests-ct.361.

=============== Diff against Collections-mt.945 ===============

Item was changed:
----- Method: Stream>>take: (in category 'collections - accessing') -----
take: maxNumberOfElements
"See Collection protocol."
+
+ | aCollection |
+ aCollection := OrderedCollection new.
+ maxNumberOfElements timesRepeat: [
+ self atEnd ifTrue: [^ aCollection].
+ aCollection addLast: self next].
+ ^ aCollection!
-
- ^ self any: maxNumberOfElements!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20210630/4bb3e8d5/attachment.html>


More information about the Squeak-dev mailing list