For a discussion of the decisions behind the design of Lua, see the technical papers available at Lua's web site.
A userdata value is a pointer to a block of raw memory.
There are two kinds of userdata: full userdata, where the block of memory is managed by Lua, and light userdata, where the block of memory is managed by the host.
Userdata has no predefined operations in Lua, except assignment and identity test.
Lua is an extension programming language designed to support general procedural programming with data description facilities.
It also offers good support for object-oriented programming, functional programming, and data-driven programming.
Lua is intended to be used as a powerful, lightweight, embeddable scripting language for any program that needs one. The host program can invoke functions to execute a piece of Lua code, can write and read Lua variables, and can register C functions to be called by Lua code.
Through the use of C functions, Lua can be augmented to cope with a wide range of different domains, thus creating customized programming languages sharing a syntactical framework.
The Lua distribution includes a sample host program called , which uses the Lua library to offer a complete, standalone Lua interpreter, for interactive or batch use.
Lua is free software, and is provided as usual with no guarantees, as stated in its license.
The implementation described in this manual is available at Lua's official web site, .
Like any other reference manual, this document is dry in places.