Lua Five Features |
|
As several people have suggested, the next version will be 5.0. We are
still planning to realease it (at least an alpha version) by May, but we
are not sure we will be able to do that. Anyway, we are trying to fix
some decisions. So, following is a list of the main differences from
lua4.1w4 to Lua 5.0. Most of them have been discussed in the list
already.
- "generic for": will have an implicit state, so that for several common
uses you don't need a new closure for each `for'.
- co-routines: basically as it is, but we will try to allow for `yield's
inside linehooks.
- metatables: as it is now, but the keys will be prefixed with '__'
(e.g. __gettable, __settable, etc.) The main idea is to facilitate
finding parts of the code that deal with metatables.
- error handling: we will probably change functions related to error
handling (dostring/dofile, call, etc.). We will have a proposal soon.
- standard libraries: standard libraries now use "namespaces". So,
strfind now is str.find, sin is math.sin, fileopen is io.open. Some
basic functions (type, assert, error, etc.) are still global. We also
changed the io library; e.g. files act as objects (f = io.open(...);
f:read(...); f:write(...)).
- declaration of globals: we introduced global declarations:
global a,b,c
global a,b,c in T
global in T -- change the default
So, "global in nil" forces declarations for every variable;
"global in {}" puts all undeclared variables into a private table;
"global sin, cos in math" allows the unqualified use of the
names "sin" and "cos".
- we introduced a "lightweight userdata", which is a value and not an
object.
- require: the path now specifies "templates", instead of directories.
For instance, require "A" with path "./?.lua;./?.lc;/usr/local/?/init.lua"
will look for "./A.lua", "./A.lc", and "/usr/local/A/init.lua".
What is still missing?
- "partial orders": the bug in comparisons with NaN must be solved. That
implies in not reducing other comparisons to "lt", and so probably the
solution will also change the "lt" tag method.
- the declaration "global in nil" forces the declaration of *all* names.
So, even basic functions like "type" and "error" should be declared. It
would be good to have some scheme to "pre-declare" some identifiers...
-- Roberto
i just wanted to comment that this looks VERY promising... anyone still missing something? please add your comments. --PeterPrade
Some comments about dofile(): I don't know if it will be possible in Lua 5.0, but in Lua 4.0 I had problems whenever I wanted to write modules in different directories. Imagine each directory had an "init.lua" which is responsible for loading all .lua files. When a module in a directory up calls dofile("<subsystem>/init.lua"), the dofiles in init.lua are relative to an unknown directory, thus for init.lua to work properly, we should put the full path on init.lua. It would be better if dofile was relative to the current executing .lua directory. --LuizCarlosSilveira
- new, faster, register-based virtual machine? Can so give an estimation of improvement ? I think it isn't worth to change things for 10 or 20%
-- P.Lefevre
The former.