[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: My wish list
- From: Egor Skriptunoff <egor.skriptunoff@...>
- Date: Fri, 16 Mar 2012 23:51:58 +0000 (GMT)
Hello, Lua people!
I have some suggestions.
Please, take a look.
---------------------------------------
1)
This function will be useful:
bit32.weight(n) == Hamming weight of n
(also known as population count,
binary digit sum, count of set bits)
---------------------------------------
2)
Frequently both quotient and remainder are needed.
Let % operator returns pair of values:
a % b == a-floor(a/b)*b, floor(a/b)
---------------------------------------
3)
Lua lacks fast function to build initialized
array. A function like this will be useful
if implemented in C:
function table.new(size, value)
value = value or 0
local t = {}
for i = 1, size do
t[i] = (type(value)=='function')
and value(i) or value
end
return t
end
---------------------------------------
4)
Why table.concat() works only with tables of
strings and numbers?
table.concat() may use tostring() to work with
arrays of any objects.
---------------------------------------
5)
Syntactic sugar needed for primitive equality.
Let a===b denotes rawequal(a,b)
Inspired by Smalltalk :)
---------------------------------------
6)
Why equality operator is so special in Lua?
Any string or any number is always not equal
to any table despite of __eq field in metatable.
Example: it is impossible to implement rational
numbers in nice manner:
local r = rationalNumber '1/12'
r = '2/3' - 2*r -- ok
assert(r > '1/3') -- ok
assert(r >= '1/2') -- ok
assert(r <= '1/2') -- ok
assert(r == '1/2') -- never
-- a blot on the landscape :(
Please let __eq metamethod to decide
whether values of different types are equal.
It will be useful for DSL Lua scripts,
where comparison of object and string is handy.
---------------------------------------
7)
Here is my suggestion about comparison operators.
Comparison operators should return:
**) nil, if values are not comparable
(3 > 'Hello') == nil
(3 == 'Hello') == nil
**) false, if opposite comparison holds
(3 > 5) == false -- because (3<=5)==true
(3 == 5) == false -- because (3~=5)==true
**) any true value (i.e., except nil and false),
if comparison holds
(3 < 5) == true
(3 ~= 5) == true
How to calculate undefined operators:
Opposite operators should preserve nil values:
*) a ~= b should be calculated as
if (a==b)==nil then return nil
else return not(a==b) end
If only __lt is defined in metatable, then:
*) a <= b should be calculated as
if (a>b)==nil then return nil
else return not(a>b) end
*) a == b should be calculated as
if (a>b)==nil then return nil
else return not((a>b)or(a<b)) end
If only __le is defined, then:
*) a < b should be calculated as
if (a>=b)==nil then return nil
else return not(a>=b) end
*) a == b should be calculated as
if (a>=b)==nil then return nil
else return (a>=b)and(a<=b) end
If only __eq is defined, then:
*) a < b should be calculated as
return nil
*) a <= b should be calculated as
return nil
If both __lt and __le are defined:
*) a == b should be calculated as
if (a>=b)==nil then return nil
else return (a>=b)and(a<=b) end
If both __lt and __eq are defined:
*) a <= b should be calculated as
if (a==b)==nil then return nil
else return (a==b)or(a<b) end
If both __le and __eq are defined:
*) a < b should be calculated as
if (a==b)==nil then return nil
else return (not(a==b))and(a<=b) end
---------------------------------------
And some questions:
---------------------------------------
8)
PiL book says, "The generic loop shares
two properties with the numeric loop:
the loop variables are local to the loop body
and you should never assign any value to them."
Question: does generic loop variables indeed
sensitive to assigning values to them?
---------------------------------------
9)
Who are the author of bright idea about _ENV upvalue?
Sandboxing in Lua is perfect now.
I just want to say thank you.
---------------------------------------
10)
Did anybody make attempt to write a specializer
for implementing Futamura-Turchin projections
in Lua (or in subset of Lua)?
(see "Partial evaluation" on Wikipedia for
brief description of the subject)
---------------------------------------
-- Egor