tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Lua in-kernel (lbuf library)



Am 21.10.13 00:05, schrieb Christoph Badura:
> On Tue, Oct 15, 2013 at 06:01:29PM -0300, Lourival Vieira Neto wrote:
>>> Also, having to switch mentally between zero-based arrays in the kernel C
>>> code and 1-based arrays in the Lua code make my head ache.
>> It's something that doesn't bug me so much.. But, if necessary it
>> could be changed to 0-based in this userdata.
> 
> When you create your own data structures, I guess it is a wash.  You have
> to adjust +/-1 in infrequent circumstances in either scenario.
> 
> But in this case you are creating a special purpose language that operates
> in universe of zero-based array.  And that's not only the kernel code.
> Every Internet protocol specification that I remember is using zero-based
> indexing.  For someone dealing with both sides (the world and your lua
> library), it makes the difference between constantly having to be alert
> to remember to do the offset adjustment.  That is a lot more mental work
> for anyone working with this library.
> 
> If you use 1-based indices talking to protocol people will be funny too:
> 
> ``Anyone know why the flags in byte 6 of this packet are funny?''
> ``Sure, that's most likely because the flags are in byte 5.''
> 
> I think it is worth thinking hard about this.
> 
> From a cursory reading of the Wireshark Lua API, it seems to me they are
> using 0-based indices too.

It probably depends whether you are access a Lua table (where you'd
expect 1-based) or if you are accessin an in-kernel datastructure that
is not strictly a Lua table.  If a Lua function is to mimick an existing
C function, it might be better indeed to use 0-based access, to not
confuse developers who are probably familiar with the corresponding C
function.

As this is mostly a matter of taste/source of confusion, it should be
documented.  A man page for a Lua function that offers the same or
similar functionality as a C function should state whether it's 0-based
or 1-based, imo.

[...]




Home | Main Index | Thread Index | Old Index