[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Implementing an integral type
- From: Reuben Thomas <rrt1001@...>
- Date: Sun, 21 Jan 2001 23:47:59 +0000 (GMT)
I am thinking about adding integer support to Lua, without giving up
floating point numbers as the basic number type. The obvious way to do this
seems to be to add a new userdata type, and provide suitable tag methods for
all the operations that can act on numbers.
However, I'm a bit worried by the description of lua_pushusertag. This says
that it first searches for a userdata with the same value and tag. The
natural way to store ints is "unboxed", i.e. to cast them to void *, but
this means that each time a C program wants to push an integer, the Lua
runtime will search to see if that integer is already in use.
So everything will work fine, but rather slowly.
I can imagine that implementing other types that take up little storage,
such as complex numbers, could give similar efficiency losses, even if the
value used as a userdata really is a pointer: it might be nice to be able to
tell Lua whether a given tag type should be shared where possible (as at
present) or copied every time (as I imagine would be better for integers).
So in the end I seem to be raising two issues:
1. How best to implement separate integer support? (Or is it just not worth
2. Is it worth allowing tag types *not* to be shared, but copied each time a
new value is created?
L'art des vers est de transformer en beautés les faiblesses (Aragon)