1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4 <title>Extensions
</title>
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=iso-8859-1">
6 <meta name=
"Author" content=
"Mike Pall">
7 <meta name=
"Copyright" content=
"Copyright (C) 2005-2011, Mike Pall">
8 <meta name=
"Language" content=
"en">
9 <link rel=
"stylesheet" type=
"text/css" href=
"bluequad.css" media=
"screen">
10 <link rel=
"stylesheet" type=
"text/css" href=
"bluequad-print.css" media=
"print">
11 <style type=
"text/css">
31 <a href=
"http://luajit.org"><span>Lua
<span id=
"logo">JIT
</span></span></a>
38 <a href=
"luajit.html">LuaJIT
</a>
40 <a href=
"install.html">Installation
</a>
42 <a href=
"running.html">Running
</a>
45 <a class=
"current" href=
"extensions.html">Extensions
</a>
47 <a href=
"ext_ffi.html">FFI Library
</a>
49 <a href=
"ext_ffi_tutorial.html">FFI Tutorial
</a>
51 <a href=
"ext_ffi_api.html">ffi.* API
</a>
53 <a href=
"ext_ffi_semantics.html">FFI Semantics
</a>
56 <a href=
"ext_jit.html">jit.* Library
</a>
58 <a href=
"ext_c_api.html">Lua/C API
</a>
61 <a href=
"status.html">Status
</a>
63 <a href=
"changes.html">Changes
</a>
66 <a href=
"faq.html">FAQ
</a>
68 <a href=
"http://luajit.org/performance.html">Performance
<span class=
"ext">»</span></a>
70 <a href=
"http://luajit.org/download.html">Download
<span class=
"ext">»</span></a>
75 LuaJIT is fully upwards-compatible with Lua
5.1. It supports all
76 <a href=
"http://www.lua.org/manual/5.1/manual.html#5"><span class=
"ext">»</span> standard Lua
77 library functions
</a> and the full set of
78 <a href=
"http://www.lua.org/manual/5.1/manual.html#3"><span class=
"ext">»</span> Lua/C API
82 LuaJIT is also fully ABI-compatible to Lua
5.1 at the linker/dynamic
83 loader level. This means you can compile a C
module against the
84 standard Lua headers and load the same shared library from either Lua
88 LuaJIT extends the standard Lua VM with new functionality and adds
89 several extension modules. Please note that this page is only about
90 <em>functional
</em> enhancements and not about performance enhancements,
91 such as the optimized VM, the faster interpreter or the JIT compiler.
94 <h2 id=
"modules">Extensions Modules
</h2>
96 LuaJIT comes with several built-in extension modules:
99 <h3 id=
"bit"><tt>bit.*
</tt> — Bitwise operations
</h3>
101 LuaJIT supports all bitwise operations as defined by
102 <a href=
"http://bitop.luajit.org"><span class=
"ext">»</span> Lua BitOp
</a>:
105 bit.tobit bit.tohex bit.bnot bit.band bit.bor bit.bxor
106 bit.lshift bit.rshift bit.arshift bit.rol bit.ror bit.bswap
109 This module is a LuaJIT built-in
— you don't need to download or
110 install Lua BitOp. The Lua BitOp site has full documentation for all
111 <a href=
"http://bitop.luajit.org/api.html"><span class=
"ext">»</span> Lua BitOp API functions
</a>.
114 Please make sure to
<tt>require
</tt> the module before using any of
118 local bit = require(
"bit")
121 An already installed Lua BitOp module is ignored by LuaJIT.
122 This way you can use bit operations from both Lua and LuaJIT on a
126 <h3 id=
"ffi"><tt>ffi.*
</tt> — FFI library
</h3>
128 The
<a href=
"ext_ffi.html">FFI library
</a> allows calling external
129 C
functions and the use of C
data structures from pure Lua
133 <h3 id=
"jit"><tt>jit.*
</tt> — JIT compiler control
</h3>
135 The functions in this module
136 <a href=
"ext_jit.html">control the behavior of the JIT compiler engine
</a>.
139 <h3 id=
"c_api">C API extensions
</h3>
142 <a href=
"ext_c_api.html">extra functions to the Lua/C API
</a>.
145 <h2 id=
"library">Enhanced Standard Library Functions
</h2>
147 <h3 id=
"xpcall"><tt>xpcall(f, err [,args...])
</tt> passes arguments
</h3>
149 Unlike the standard implementation in Lua
5.1,
<tt>xpcall()
</tt>
150 passes any arguments after the error function to the function
151 which is called in a protected context.
154 <h3 id=
"load"><tt>loadfile()
</tt> etc. handle UTF-
8 source code
</h3>
156 Non-ASCII characters are handled transparently by the Lua source code parser.
157 This allows the use of UTF-
8 characters in identifiers and strings.
158 A UTF-
8 BOM is skipped at the start of the source code.
161 <h3 id=
"tostring"><tt>tostring()
</tt> etc. canonicalize NaN and
±Inf
</h3>
163 All number-to-string conversions consistently convert non-finite numbers
164 to the same strings on all platforms. NaN results in
<tt>"nan"</tt>,
165 positive infinity results in
<tt>"inf"</tt> and negative infinity results
169 <h3 id=
"string_dump"><tt>string.dump(f [,strip])
</tt> generates portable bytecode
</h3>
171 An extra argument has been added to
<tt>string.dump()
</tt>. If set to
172 <tt>true
</tt>, 'stripped' bytecode without debug information is
173 generated. This speeds up later bytecode loading and reduces memory
175 <a href=
"running.html#opt_b"><tt>-b
</tt> command line option
</a>.
178 The generated bytecode is portable and can be loaded on any architecture
179 that LuaJIT supports, independent of word size or endianess. However the
180 bytecode compatibility versions must match. Bytecode stays compatible
181 for dot releases (x.y
.0 → x.y
.1), but may change with major or
182 minor releases (
2.0 → 2.1) or between any beta release. Foreign
183 bytecode (e.g. from Lua
5.1) is incompatible and cannot be loaded.
186 <h3 id=
"math_random">Enhanced PRNG for
<tt>math.random()
</tt></h3>
188 LuaJIT uses a Tausworthe PRNG with period
2^
223 to implement
189 <tt>math.random()
</tt> and
<tt>math.randomseed()
</tt>. The quality of
190 the PRNG results is much superior compared to the standard Lua
191 implementation which uses the platform-specific ANSI rand().
194 The PRNG generates the same sequences from the same seeds on all
195 platforms and makes use of all bits in the seed argument.
196 <tt>math.random()
</tt> without arguments generates
52 pseudo-random bits
197 for every call. The result is uniformly distributed between
0 and
1.
198 It's correctly scaled up and rounded for
<tt>math.random(n
[,m])
</tt> to
202 <h3 id=
"io"><tt>io.*
</tt> functions handle
64 bit file offsets
</h3>
204 The file I/O functions in the standard
<tt>io.*
</tt> library handle
205 64 bit file offsets. In particular this means it's possible
206 to open files larger than
2 Gigabytes and to reposition or obtain
207 the current file position for offsets beyond
2 GB
208 (
<tt>fp:seek()
</tt> method).
211 <h3 id=
"debug_meta"><tt>debug.*
</tt> functions identify metamethods
</h3>
213 <tt>debug.getinfo()
</tt> and
<tt>lua_getinfo()
</tt> also return information
214 about invoked metamethods. The
<tt>namewhat
</tt> field is set to
215 <tt>"metamethod"</tt> and the
<tt>name
</tt> field has the name of
216 the corresponding metamethod (e.g.
<tt>"__index"</tt>).
219 <h2 id=
"resumable">Fully Resumable VM
</h2>
221 The LuaJIT
2.x VM is fully resumable. This means you can yield from a
222 coroutine even across contexts, where this would not possible with
223 the standard Lua
5.1 VM: e.g. you can yield across
<tt>pcall()
</tt>
224 and
<tt>xpcall()
</tt>, across iterators and across metamethods.
227 Note however that LuaJIT
2.x doesn't use
228 <a href=
"http://coco.luajit.org/"><span class=
"ext">»</span> Coco
</a> anymore. This means the
229 overhead for creating coroutines is much smaller and no extra
230 C
stacks need to be allocated. OTOH you can no longer yield
231 across arbitrary C
functions. Keep this in mind when
232 upgrading from LuaJIT
1.x.
235 <h2 id=
"exceptions">C++ Exception Interoperability
</h2>
237 LuaJIT has built-in support for interoperating with C++
exceptions.
238 The available range of features depends on the target platform and
239 the toolchain used to compile LuaJIT:
243 <td class=
"excplatform">Platform
</td>
244 <td class=
"exccompiler">Compiler
</td>
245 <td class=
"excinterop">Interoperability
</td>
247 <tr class=
"odd separate">
248 <td class=
"excplatform">POSIX/x64, DWARF2 unwinding
</td>
249 <td class=
"exccompiler">GCC
4.3+
</td>
250 <td class=
"excinterop"><b style=
"color: #00a000;">Full
</b></td>
253 <td class=
"excplatform">Other platforms, DWARF2 unwinding
</td>
254 <td class=
"exccompiler">GCC
</td>
255 <td class=
"excinterop"><b style=
"color: #c06000;">Limited
</b></td>
258 <td class=
"excplatform">Windows/x64
</td>
259 <td class=
"exccompiler">MSVC or WinSDK
</td>
260 <td class=
"excinterop"><b style=
"color: #00a000;">Full
</b></td>
263 <td class=
"excplatform">Windows/x86
</td>
264 <td class=
"exccompiler">Any
</td>
265 <td class=
"excinterop"><b style=
"color: #a00000;">No
</b></td>
268 <td class=
"excplatform">Other platforms
</td>
269 <td class=
"exccompiler">Other compilers
</td>
270 <td class=
"excinterop"><b style=
"color: #a00000;">No
</b></td>
274 <b style=
"color: #00a000;">Full interoperability
</b> means:
277 <li>C++
exceptions can be caught on the Lua side with
<tt>pcall()
</tt>,
278 <tt>lua_pcall()
</tt> etc.
</li>
279 <li>C++
exceptions will be converted to the generic Lua error
280 <tt>"C++ exception"</tt>, unless you use the
281 <a href=
"ext_c_api.html#mode_wrapcfunc">C
call wrapper
</a> feature.
</li>
282 <li>It's safe to throw C++
exceptions across non-protected Lua frames
283 on the C
stack. The contents of the C++
exception object
284 pass through unmodified.
</li>
285 <li>Lua errors can be caught on the C++ side with
<tt>catch(...)
</tt>.
286 The corresponding Lua error message can be retrieved from the Lua stack.
</li>
287 <li>Throwing Lua errors across C++ frames is safe. C++ destructors
291 <b style=
"color: #c06000;">Limited interoperability
</b> means:
294 <li>C++
exceptions can be caught on the Lua side with
<tt>pcall()
</tt>,
295 <tt>lua_pcall()
</tt> etc.
</li>
296 <li>C++
exceptions will be converted to the generic Lua error
297 <tt>"C++ exception"</tt>, unless you use the
298 <a href=
"ext_c_api.html#mode_wrapcfunc">C
call wrapper
</a> feature.
</li>
299 <li>C++
exceptions will be caught by non-protected Lua frames and
300 are rethrown as a generic Lua error. The C++
exception object will
302 <li>Lua errors
<b>cannot
</b> be caught on the C++ side.
</li>
303 <li>Throwing Lua errors across C++ frames will
<b>not
</b> call
304 C++ destructors.
</li>
308 <b style=
"color: #a00000;">No interoperability
</b> means:
311 <li>It's
<b>not
</b> safe to throw C++
exceptions across Lua frames.
</li>
312 <li>C++
exceptions
<b>cannot
</b> be caught on the Lua side.
</li>
313 <li>Lua errors
<b>cannot
</b> be caught on the C++ side.
</li>
314 <li>Throwing Lua errors across C++ frames will
<b>not
</b> call
315 C++ destructors.
</li>
316 <li>Additionally, on Windows/x86 with SEH-based C++
exceptions:
317 it's
<b>not
</b> safe to throw a Lua error across any frames containing
318 a C++ function with any try/catch construct or using variables with
319 (implicit) destructors. This also applies to any functions which may be
320 inlined in such a function. It doesn't matter whether
<tt>lua_error()
</tt>
321 is called inside or outside of a try/catch or whether any object actually
322 needs to be destroyed: the SEH chain is corrupted and this will eventually
323 lead to the termination of the process.
</li>
329 Copyright
© 2005-
2011 Mike Pall
330 <span class=
"noprint">
332 <a href=
"contact.html">Contact
</a>