[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