[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: boolean operators
- From: Nick Gammon <nick@...>
- Date: Thu, 28 Sep 2006 07:27:08 +1000
> May I ask you (and others) why you need boolean operators in Lua?
You haven't specified if you mean literally "operators" like >> and
<< in C, or simply to imbed a bitwise manipulation library in the
I think you can make 5 major cases for some sort of bitwise operation
in the default implementation:
1. To interface with the host program, which may need you to set or
test individual bits
2. To do calculations (like checksums, encryption) which are defined
in terms of XOR and similar.
3. Most script languages other than Lua support bitwise operations.
4. Extending the language (by using loadlib etc.) is not always
possible for the end-user.
5. It is easy to do.
Interface with host
One of the major features of Lua is its use as an imbedded script
language. Thus, the needs of the host need to be taken into
consideration. There are many cases where the host may need flags set
or tested. For example, interfacing with a GUI operating system, you
may have a bit set to indicate if the Ctrl or Shift key is pressed.
Also when calling the host program's functions you may need to set or
clear individual bits.
Certainly, host program developers can extend Lua by adding their own
"bit" library, but really, bit manipulation could easily be regarded
as a "core need" and not require every developer to roll their own
A while back I was planning to implement AES encryption using pure
Lua, but the fact that almost every encryption and hash algorithm
requires bitwise XOR, OR, and AND operations, this would have been
very tedious in Lua. It is *possible*, by converting numbers to
strings and back, but the results would surely be appallingly slow
(and hard to read). I could have loaded in a bit library to do the
bit manipulation, but if you are going to do that, you may as well
load in an encryption library itself, and bypass the bit library
Other script languages
As far as I can make out, various "competing" script languages have
bit manipulation supplied as standard (eg. VBscript, Perlscript,
Extension not always possible
There are various implementations of Lua around which make it
difficult or impossible for the end-user to do things like
package.loadlib, for security reasons. They don't want their users to
run arbitrary code. Thus the option of loading in an external bitwise
library is not always available.
Easy to do
If you simply add Reuben Thomas's bit library to the standard
distribution, it is only about 60 lines of code (half of which are
#defines). If a Lua user is desperate for space, they can omit it in
custom versions, however the default distribution can surely spare
that minor extra code?
An alternative to simply incorporating the library as standard would
be to actually modify the parser and virtual machine to handle bit
operations inline (eg. a = b >> 4). This would add speed no doubt,
but be more work overall. Personally I would be happy if the bitwise
operations were available either way - library or as direct operators.
- Nick Gammon