[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Bit ops on boolean arrays?
- From: Eduardo Ochs <eduardoochs@...>
- Date: Thu, 30 Dec 2010 16:25:35 -0200
What about implementing in C the functions:
bitarray_and
bitarray_or
bitarray_xor
bitarray_not
that operate on strings? A string with length 20 would then stand for
an array of 160 bits...
> The use of efficient bit ops to perform high-level operations on
> bool arrays would happen behind the scenes, invisible to the user.
The low-level way to create a bitarray "object" from a string with
length 20 would be this:
bo = {str20}
setmetatable(bo, bitarray_metatable)
That would give you _exactly the right kind_ of invisibility to the
user (trust me).
Cheers,
Eduardo Ochs
eduardoochs@gmail.com
http://angg.twu.net/
On Thu, Dec 30, 2010 at 3:50 PM, David J. Slate <dslate@speakeasy.net> wrote:
> I'm not sure Steve Donovan and Gavin Wraith understood the idea of my
> post. I appreciate that the beauty of Lua is how much expressive
> power it achieves from such simple syntax and semantics. As far as I
> can tell, my suggestion requires no change to the Lua language at all.
> The use of efficient bit ops to perform high-level operations on bool
> arrays would happen behind the scenes, invisible to the user. And the
> library functions to operate on these arrays would be more general
> than those of bit32, not restricted to 32 bits, and in my opinion less
> "kludgy".
>
> The problem with my idea is not that it clutters up the language, but
> that it requires another internal representation of a certain kind of
> array, and it may simply not be worth the effort to write the code to
> deal with this representation.
>
>
> On Thu, 30 Dec 2010 17:33:02 +0200 steve donovan <steve.j.donovan@gmail.com> wrote:
>
>> On Thu, Dec 30, 2010 at 5:14 PM, David J. Slate <dslate@speakeasy.net> wrote:
>> > Any thoughts on the desirability or feasibility of this idea?
>>
>> It's a cool thing to have around, but much better to make it a C
>> extension. Otherwise Lua ends up supporting everything like PL/1, the
>> classic big-committee language.
>>
>> steve d.
>
>
> On Thu, 30 Dec 2010 16:25:16 GMT Gavin Wraith <gavin@wra1th.plus.com> wrote:
>
>> In message <AANLkTinTu7P0jKdsYA4j36tbvGk555DHU4yWYMXmBX0o@mail.gmail.com> you wrote:
>>
>> > On Thu, Dec 30, 2010 at 5:14 PM, David J. Slate <dslate@speakeasy.net> wrote:
>> > > Any thoughts on the desirability or feasibility of this idea?
>>
>> Is this the sort of thing envisaged? OK it is RiscLua, not pure Lua, but
>> I guess the syntactic differences are not hard to swallow.
>>
>> #! lua
>> -- library for tables with value true
>> do
>> local metabool
>> bool = \(t) => setmetatable(t,metabool) end
>> local paren = "(%s)"
>> local boolmeths = {
>> tostring = \(self)
>> local o = {}
>> for a,v in pairs(self) do
>> if v then o[1+#o] = tostring(a) end -- if
>> end -- for
>> local s = table.concat(o,",")
>> => paren:format(s)
>> end;
>> }
>> metabool = {
>> __bit_and = \(x,y)
>> local o = bool {}
>> for a,v in pairs(x) do
>> if v and y[a] then o[a] = true end -- if
>> end -- for
>> => o
>> end;
>> __bit_or = \(x,y)
>> local o = bool {}
>> for a,v in pairs(x) do
>> if v then o[a] = true end -- if
>> end -- for
>> for a,v in pairs(y) do
>> if v then o[a] = true end -- if
>> end -- for
>> => o
>> end;
>> __bit_xor = \(x,y)
>> local o = bool {}
>> for a,v in pairs(x) do
>> if v and not y[a] then o[a] = true end -- if
>> end -- for
>> for a,v in pairs(y) do
>> if v and not x[a] then o[a] = true end -- if
>> end -- for
>> => o
>> end;
>> __index = boolmeths;
>> }
>>
>> end
>>
>> x = bool { a = true, b = true, c = true }
>> y = bool { b = true, c = true, d = true }
>>
>> print((x&y):tostring()) --> (c,b)
>> print((x|y):tostring()) --> (a,d,c,b)
>> print((x^^y):tostring()) --> (a,d)
>>
>> --
>> Gavin Wraith (gavin@wra1th.plus.com)
>> Home page: http://www.wra1th.plus.com/
>
>