[squeak-dev] The Inbox: Collections-ul.844.mcz

Levente Uzonyi leves at caesar.elte.hu
Fri Jul 19 13:54:25 UTC 2019


Hi Tobias,

On Fri, 19 Jul 2019, Tobias wrote:

>
> Hi Levente
>
> On Thu, 2019-07-18 at 22:13 +0000, commits at source.squeak.org wrote:
>> Levente Uzonyi uploaded a new version of Collections to project The
>> Inbox:
>> http://source.squeak.org/inbox/Collections-ul.844.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Collections-ul.844
>> Author: ul
>> Time: 19 July 2019, 12:08:51.94435 am
>> UUID: df5ebfa9-4ebf-4505-8031-afd892a1061c
>> Ancestors: Collections-mt.843
>>
>> - added String >> #atOrNil: which uses primitive 63 and returns
>> either the character at the given index or nil when the primtiive
>> fails. This is a faster alternative to #at:ifAbsent: when the absent
>> block would yield nil.
>>
>
> Could you tell me the use case here?

ShoutCore-ul.66 in the Inbox.

> This sounds like a convoluted range check.

Yes, it's a way to avoid the range check being done by the image.

> I mean, yes it would be faster to do
>
> knorz := 'foo'
> index := 32
> ^ knorz atOrNil: index
>
> but I would rather see
>
> knorz := 'foo'
> index := 32
> ^ index <= knorz size ifTrue:  [knorz at: size]

That's not enough. You have to check the other end of the range as well.
And that's what this method tries to avoid.

>
> or more robust even
>
>
> knorz := 'foo'
> index := 32
> ^ knorz atPin: 32

You want to be able to distinguish invalid input and correct input in most 
cases. With Shout that's mandatory, so #atPin: wouldn't work.

Levente

>
> (even though that changes the semantic)
>
> So, can you tell me the use case here?
> Best regards
> 	-Tobias
>
> PS: That said, I think using #at: for String in the first place will
> bite us down the road, whether we want to change the String
> representation at some point (ropes, immutables, values, ...) or just
> because Unicode is hard: ('Lèon' at: 3) can surely yield $'̀ ', $e
> or $'è'


More information about the Squeak-dev mailing list