[Gambas-user] New feature in the Array classes

Tobias Boege tobs at taboege.de
Tue Feb 9 20:54:17 CET 2021


On Tue, 09 Feb 2021, Benoît Minisini wrote:
> Hi,
> 
> Following the recent optimizations on the array classes (that apparently
> made array access about 15% faster), I added a new property named "Sorted"
> to the array classes.
> 
> If you set that property to TRUE, it will tell the interpreter that the
> array is sorted.
> 
> Then, the Find() and Exist() method will use a faster binary search
> algorithm instead of a sequential one.
> 
> But it's up to you to maintain the array sorted. If Array.Sorted is TRUE,
> and the array is not actually sorted, the result of Find() and Exist() will
> be false.
> 

The performance benefit of this will probably be very nice wherever
it can be reliably exploited.

But I am a little concerned about Sorted being a property of the object
instead of an optional argument to the two methods that make use of it.
For these two related reasons:

  - If I write a library that uses arrays passed in by the user,
    I now have to take care to reset the Sorted property (which may
    have been set by the user earlier) whenever I do an operation
    which cannot guarantee that the order is maintained. Otherwise
    my code is potentially buggy. (All code people wrote to this day
    which modifies arrays and then searches in them is now potentially
    buggy, because they don't reset Sorted.)

  - Moreover, there is an API breakage even when you use arrays only
    in a read-only fashion. When someone passes into my trusty Gambas
    library written for the stable v3.12, which is still working fine
    otherwise, an array with Sorted = True, of which my old code is
    unaware, and I call Find() on it and compare it to the previously
    documented value -1 indicating "not found", my code is now buggy,
    as in Sorted mode I have to compare with < 0 to see if the value
    was not found.

These wouldn't be problems if the *caller* of the method could opt into
binary search, instead of everyone who had a reference to the object at
some point in the program's lifetime making that choice for code that
is unaware of that feature.

Best,
Tobias

-- 
"There's an old saying: Don't change anything... ever!" -- Mr. Monk


More information about the User mailing list