[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: two changes I'd like to see in version 3.1
- From: Roberto Ierusalimschy <roberto@...>
- Date: Fri, 26 Jun 1998 16:48:06 -0300
> There are two changes I'd like to see in Lua, both of which would make
> it a little easier to connect C code to Lua.
> I try to be careful in my code to use const char * when I know I'm
> dealing with immutable strings. Unfortunately, many Lua functions use
> parameter types of char *, even when const char * would be correct, so
> I get a slew of warning messages. It would be nice if the signatures
> were updated properly. I believe that *all* strings are immutable in
> Lua, so that all instances of char * could be replaced with const
In fact, all strings in Lua are immutable, and the addition of "const"
could make things clearer. But that change is not that easy; we would have
to change all Lua to use "const", otherwise we sould only change the
position of the warnings. Besides the work, this has two difficulties:
- some machines do not have correct "const"s in their header files; when
we use const on those machines we get a lot of warnings when calling strcmp,
- once we changed all Lua to use const. I know this is unbelievable, but in
our machine this change made Lua bigger and slower (we double-checked that)!!
After that we gave up using const.
For now, you may use some macros to do a "polite" typecast from "const
char *" to "char *" around Lua API.
> The other change I'd like to see is minor: I'd like the C version of
> lua_error to have the same signature as printf. This should
> relatively easy to implement in ANSI C using <stdarg.h> and vsprintf.
Unfortunately, this is not a minor change. The error method is a Lua
function, not a C one. When you call lua_error, the error method is called
through Lua calling conventions, and there is no way in ANSI C to
dynamically build the "arg list" from Lua parameters. On the other hand, we
cannot use Lua's "format" in the default error method, because "format" is
not part of Lua: It's in a library.