[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Changes to table length
- From: Ross Berteig <Ross@...>
- Date: Sat, 20 Aug 2016 16:54:09 -0700
On 8/20/2016 3:34 AM, Soni L. wrote:
The first change is to remove length entirely.
The `#` operator as defined in 5.1 is useful, is implemented, and is
tested across 5.1, 5.2, and 5.3.
If it not useful to you, don't use it. It's presence is not causing
harm, other than the persistent threads by you that demand some change
or another. Stop doing that, and the frontier/length operator does no harm.
If any change to it is to be made, I would ask for two cosmetic
documentation changes, and one additional function in `table`.
First, I would ask that the definition of `#` return to the precision it
had in 5.1 which is how it is actually implemented in all three versions.
It could also be formally named "frontier", and exposed as
table.frontier() for the benefit of data structure libraries that would
like to define __len to suit their model and still have the original
behavior handy for internal use.
The last cosmetic change I'd recommend is to find a new name for the
internal implementation detail now called "array part" vs. "hash part"
of a table. Yes, the optimization is for tables used like arrays or
sequences. But the name is confusing newcomers into imagining all kinds
wrong models of what tables are and how they work. I don't have a better
name at hand to suggest, unfortunately, so that particular bike shedding
exercise can be deferred indefinitely.
All the rest is moot.
I believe these changes will really help w.r.t. arguments about length.
There is no argument. Length is by definition what `#` returns. If that
definition doesn't work for you, then implement your own class over a
table, which since 5.2 is easy to do using __len.
Please stop trying to break the language for everyone else in pursuit of
a goal that only you want.
Ross Berteig Ross@CheshireEng.com
Cheshire Engineering Corp. http://www.CheshireEng.com/
+1 626 303 1602