Lua Five Features |
|
|
TODO: Could someone update this for Lua 5.0 final please? ---- |
|
=== Changes from version 4.0 to 5.0 === |
From the mailinglist:
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 In other cases one may not want such behavior. Consider making your own wrapper for dofile to handle this. ---- === Changes from version 4.0 to 5.0 (beta) (From lua-5.0-beta\HISTORY) === |
|
(from HISTORY file in distribution) |
|
* lexical scoping. * Lua coroutines. * standard libraries now packaged in tables. * tags replaced by metatables and tag methods replaced by metamethods, stored in metatables. * proper tail calls. * each function can have its own global table, which can be shared. * new __newindex metamethod, called when we insert a new key into a table. * new block comments: --[[ ... ]]. * new generic for. * new weak tables. * new boolean type. * new syntax "local function". * (f()) returns the first value returned by f. * {f()} fills a table with all values returned by f. * \n ignored in [[\n . * fixed and-or priorities. * more general syntax for function definition (e.g. function a.x.y:f()...end). * more general syntax for function calls (e.g. (print or write)(9)). * new functions (time/date, tmpfile, unpack, require, load*, etc.). |
|
== API == * chunks are loaded by using lua_load; new luaL_loadfile and luaL_loadbuffer. * introduced lightweight userdata, a simple "void*" without a metatable. * new error handling protocol: the core no longer prints error messages; all errors are reported to the caller on the stack. * new lua_atpanic for host cleanup. * new, signal-safe, hook scheme. |
|
*lexical scoping. *Lua coroutines. *standard libraries now packaged in tables. *tags replaced by metatables and tag methods replaced by metamethods, stored in metatables. *proper tail calls. *each function can have its own global table, which can be shared. *new __newindex metamethod, called when we insert a new key into a table. *new block comments: --[[ ... ]]. *new generic for. *new weak tables. *new boolean type. *new syntax "local function". *(f()) returns the first value returned by f. *{f()} fills a table with all values returned by f. *\n ignored in [[\n . *fixed and-or priorities. *more general syntax for function definition (e.g. function a.x.y:f()...end). *more general syntax for function calls (e.g. (print or write)(9)). *new functions (time/date, tmpfile, unpack, require, load*, etc.). |
|
== Implementation == |
|
== API == |
|
* new license: MIT. * new, faster, register-based virtual machine. * support for external multithreading and coroutines. * new and consistent error message format. * the core no longer needs "stdio.h" for anything (except for a single use of sprintf to convert numbers to strings). * lua.c now runs the environment variable LUA_INIT, if present. It can be "@filename", to run a file, or the chunk itself. * support to user extensions in lua.c. sample implementations given for dynamic loading and command line editing. * safe garbage-collector metamethods. * precompiled bytecodes checked for integrity (secure binary dostring). * strings are fully aligned. * position capture in string.find. * read('*l') can read lines with embedded zeros. * coffee-brewing capabilities - 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 |
|
*chunks are loaded by using lua_load; new luaL_loadfile and luaL_loadbuffer. *introduced lightweight userdata, a simple "void*" without a metatable. *new error handling protocol: the core no longer prints error messages; all errors are reported to the caller on the stack. *new lua_atpanic for host cleanup. *new, signal-safe, hook scheme. |
|
---- |
|
== Implementation == |
|
By "proper tail calls" does that mean Lua does full tailcall elimination, or is it restricted to the recursion case? |
|
*new license: MIT. *new, faster, register-based virtual machine. *support for external multithreading and coroutines. *new and consistent error message format. *the core no longer needs "stdio.h" for anything (except for a single use of sprintf to convert numbers to strings). *lua.c now runs the environment variable LUA_INIT, if present. It can be "@filename", to run a file, or the chunk itself. *support for user extensions in lua.c. Sample implementation given for command line editing. *new dynamic loading library, active by default on several platforms. *safe garbage-collector metamethods. *precompiled bytecodes checked for integrity (secure binary dostring). *strings are fully aligned. *position capture in string.find. *read('*l') can read lines with embedded zeros. |
|
The former. |
(from HISTORY file in distribution)