~ubuntu-branches/ubuntu/utopic/sysdig/utopic

« back to all changes in this revision

Viewing changes to third-party/LuaJIT-2.0.2/doc/extensions.html

  • Committer: Package Import Robot
  • Author(s): Evgeni Golov
  • Date: 2014-05-01 14:53:09 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20140501145309-yy0hkts9nlu43omp
Tags: 0.1.81-1
* New upstream release
* Add B-D on zlib1g-dev and use it for building
* drop LuaJIT from debian/copyright, upstream does not ship the
  copy anymore
* Only require and execute dh_dkms when building arch-independent
  stuff

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
 
<html>
3
 
<head>
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-2013, 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">
12
 
table.exc {
13
 
  line-height: 1.2;
14
 
}
15
 
tr.exchead td {
16
 
  font-weight: bold;
17
 
}
18
 
td.excplatform {
19
 
  width: 48%;
20
 
}
21
 
td.exccompiler {
22
 
  width: 29%;
23
 
}
24
 
td.excinterop {
25
 
  width: 23%;
26
 
}
27
 
</style>
28
 
</head>
29
 
<body>
30
 
<div id="site">
31
 
<a href="http://luajit.org"><span>Lua<span id="logo">JIT</span></span></a>
32
 
</div>
33
 
<div id="head">
34
 
<h1>Extensions</h1>
35
 
</div>
36
 
<div id="nav">
37
 
<ul><li>
38
 
<a href="luajit.html">LuaJIT</a>
39
 
<ul><li>
40
 
<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
41
 
</li><li>
42
 
<a href="install.html">Installation</a>
43
 
</li><li>
44
 
<a href="running.html">Running</a>
45
 
</li></ul>
46
 
</li><li>
47
 
<a class="current" href="extensions.html">Extensions</a>
48
 
<ul><li>
49
 
<a href="ext_ffi.html">FFI Library</a>
50
 
<ul><li>
51
 
<a href="ext_ffi_tutorial.html">FFI Tutorial</a>
52
 
</li><li>
53
 
<a href="ext_ffi_api.html">ffi.* API</a>
54
 
</li><li>
55
 
<a href="ext_ffi_semantics.html">FFI Semantics</a>
56
 
</li></ul>
57
 
</li><li>
58
 
<a href="ext_jit.html">jit.* Library</a>
59
 
</li><li>
60
 
<a href="ext_c_api.html">Lua/C API</a>
61
 
</li></ul>
62
 
</li><li>
63
 
<a href="status.html">Status</a>
64
 
<ul><li>
65
 
<a href="changes.html">Changes</a>
66
 
</li></ul>
67
 
</li><li>
68
 
<a href="faq.html">FAQ</a>
69
 
</li><li>
70
 
<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
71
 
</li><li>
72
 
<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
73
 
</li><li>
74
 
<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
75
 
</li></ul>
76
 
</div>
77
 
<div id="main">
78
 
<p>
79
 
LuaJIT is fully upwards-compatible with Lua 5.1. It supports all
80
 
<a href="http://www.lua.org/manual/5.1/manual.html#5"><span class="ext">&raquo;</span>&nbsp;standard Lua
81
 
library functions</a> and the full set of
82
 
<a href="http://www.lua.org/manual/5.1/manual.html#3"><span class="ext">&raquo;</span>&nbsp;Lua/C API
83
 
functions</a>.
84
 
</p>
85
 
<p>
86
 
LuaJIT is also fully ABI-compatible to Lua 5.1 at the linker/dynamic
87
 
loader level. This means you can compile a C&nbsp;module against the
88
 
standard Lua headers and load the same shared library from either Lua
89
 
or LuaJIT.
90
 
</p>
91
 
<p>
92
 
LuaJIT extends the standard Lua VM with new functionality and adds
93
 
several extension modules. Please note this page is only about
94
 
<em>functional</em> enhancements and not about performance enhancements,
95
 
such as the optimized VM, the faster interpreter or the JIT compiler.
96
 
</p>
97
 
 
98
 
<h2 id="modules">Extensions Modules</h2>
99
 
<p>
100
 
LuaJIT comes with several built-in extension modules:
101
 
</p>
102
 
 
103
 
<h3 id="bit"><tt>bit.*</tt> &mdash; Bitwise operations</h3>
104
 
<p>
105
 
LuaJIT supports all bitwise operations as defined by
106
 
<a href="http://bitop.luajit.org"><span class="ext">&raquo;</span>&nbsp;Lua BitOp</a>:
107
 
</p>
108
 
<pre class="code">
109
 
bit.tobit  bit.tohex  bit.bnot    bit.band bit.bor  bit.bxor
110
 
bit.lshift bit.rshift bit.arshift bit.rol  bit.ror  bit.bswap
111
 
</pre>
112
 
<p>
113
 
This module is a LuaJIT built-in &mdash; you don't need to download or
114
 
install Lua BitOp. The Lua BitOp site has full documentation for all
115
 
<a href="http://bitop.luajit.org/api.html"><span class="ext">&raquo;</span>&nbsp;Lua BitOp API functions</a>.
116
 
</p>
117
 
<p>
118
 
Please make sure to <tt>require</tt> the module before using any of
119
 
its functions:
120
 
</p>
121
 
<pre class="code">
122
 
local bit = require("bit")
123
 
</pre>
124
 
<p>
125
 
An already installed Lua BitOp module is ignored by LuaJIT.
126
 
This way you can use bit operations from both Lua and LuaJIT on a
127
 
shared installation.
128
 
</p>
129
 
 
130
 
<h3 id="ffi"><tt>ffi.*</tt> &mdash; FFI library</h3>
131
 
<p>
132
 
The <a href="ext_ffi.html">FFI library</a> allows calling external
133
 
C&nbsp;functions and the use of C&nbsp;data structures from pure Lua
134
 
code.
135
 
</p>
136
 
 
137
 
<h3 id="jit"><tt>jit.*</tt> &mdash; JIT compiler control</h3>
138
 
<p>
139
 
The functions in this module
140
 
<a href="ext_jit.html">control the behavior of the JIT compiler engine</a>.
141
 
</p>
142
 
 
143
 
<h3 id="c_api">C API extensions</h3>
144
 
<p>
145
 
LuaJIT adds some
146
 
<a href="ext_c_api.html">extra functions to the Lua/C API</a>.
147
 
</p>
148
 
 
149
 
<h2 id="library">Enhanced Standard Library Functions</h2>
150
 
 
151
 
<h3 id="xpcall"><tt>xpcall(f, err [,args...])</tt> passes arguments</h3>
152
 
<p>
153
 
Unlike the standard implementation in Lua 5.1, <tt>xpcall()</tt>
154
 
passes any arguments after the error function to the function
155
 
which is called in a protected context.
156
 
</p>
157
 
 
158
 
<h3 id="load"><tt>loadfile()</tt> etc. handle UTF-8 source code</h3>
159
 
<p>
160
 
Non-ASCII characters are handled transparently by the Lua source code parser.
161
 
This allows the use of UTF-8 characters in identifiers and strings.
162
 
A UTF-8 BOM is skipped at the start of the source code.
163
 
</p>
164
 
 
165
 
<h3 id="tostring"><tt>tostring()</tt> etc. canonicalize NaN and &plusmn;Inf</h3>
166
 
<p>
167
 
All number-to-string conversions consistently convert non-finite numbers
168
 
to the same strings on all platforms. NaN results in <tt>"nan"</tt>,
169
 
positive infinity results in <tt>"inf"</tt> and negative infinity results
170
 
in <tt>"-inf"</tt>.
171
 
</p>
172
 
 
173
 
<h3 id="tonumber"><tt>tonumber()</tt> etc. use builtin string to number conversion</h3>
174
 
<p>
175
 
All string-to-number conversions consistently convert integer and
176
 
floating-point inputs in decimal and hexadecimal on all platforms.
177
 
<tt>strtod()</tt> is <em>not</em> used anymore, which avoids numerous
178
 
problems with poor C library implementations. The builtin conversion
179
 
function provides full precision according to the IEEE-754 standard, it
180
 
works independently of the current locale and it supports hex floating-point
181
 
numbers (e.g. <tt>0x1.5p-3</tt>).
182
 
</p>
183
 
 
184
 
<h3 id="string_dump"><tt>string.dump(f [,strip])</tt> generates portable bytecode</h3>
185
 
<p>
186
 
An extra argument has been added to <tt>string.dump()</tt>. If set to
187
 
<tt>true</tt>, 'stripped' bytecode without debug information is
188
 
generated. This speeds up later bytecode loading and reduces memory
189
 
usage. See also the
190
 
<a href="running.html#opt_b"><tt>-b</tt> command line option</a>.
191
 
</p>
192
 
<p>
193
 
The generated bytecode is portable and can be loaded on any architecture
194
 
that LuaJIT supports, independent of word size or endianess. However the
195
 
bytecode compatibility versions must match. Bytecode stays compatible
196
 
for dot releases (x.y.0 &rarr; x.y.1), but may change with major or
197
 
minor releases (2.0 &rarr; 2.1) or between any beta release. Foreign
198
 
bytecode (e.g. from Lua 5.1) is incompatible and cannot be loaded.
199
 
</p>
200
 
 
201
 
<h3 id="math_random">Enhanced PRNG for <tt>math.random()</tt></h3>
202
 
<p>
203
 
LuaJIT uses a Tausworthe PRNG with period 2^223 to implement
204
 
<tt>math.random()</tt> and <tt>math.randomseed()</tt>. The quality of
205
 
the PRNG results is much superior compared to the standard Lua
206
 
implementation which uses the platform-specific ANSI rand().
207
 
</p>
208
 
<p>
209
 
The PRNG generates the same sequences from the same seeds on all
210
 
platforms and makes use of all bits in the seed argument.
211
 
<tt>math.random()</tt> without arguments generates 52 pseudo-random bits
212
 
for every call. The result is uniformly distributed between 0.0 and 1.0.
213
 
It's correctly scaled up and rounded for <tt>math.random(n&nbsp;[,m])</tt> to
214
 
preserve uniformity.
215
 
</p>
216
 
 
217
 
<h3 id="io"><tt>io.*</tt> functions handle 64&nbsp;bit file offsets</h3>
218
 
<p>
219
 
The file I/O functions in the standard <tt>io.*</tt> library handle
220
 
64&nbsp;bit file offsets. In particular this means it's possible
221
 
to open files larger than 2&nbsp;Gigabytes and to reposition or obtain
222
 
the current file position for offsets beyond 2&nbsp;GB
223
 
(<tt>fp:seek()</tt> method).
224
 
</p>
225
 
 
226
 
<h3 id="debug_meta"><tt>debug.*</tt> functions identify metamethods</h3>
227
 
<p>
228
 
<tt>debug.getinfo()</tt> and <tt>lua_getinfo()</tt> also return information
229
 
about invoked metamethods. The <tt>namewhat</tt> field is set to
230
 
<tt>"metamethod"</tt> and the <tt>name</tt> field has the name of
231
 
the corresponding metamethod (e.g. <tt>"__index"</tt>).
232
 
</p>
233
 
 
234
 
<h2 id="resumable">Fully Resumable VM</h2>
235
 
<p>
236
 
The LuaJIT VM is fully resumable. This means you can yield from a
237
 
coroutine even across contexts, where this would not possible with
238
 
the standard Lua&nbsp;5.1 VM: e.g. you can yield across <tt>pcall()</tt>
239
 
and <tt>xpcall()</tt>, across iterators and across metamethods.
240
 
</p>
241
 
 
242
 
<h2 id="lua52">Extensions from Lua 5.2</h2>
243
 
<p>
244
 
LuaJIT supports some language and library extensions from Lua&nbsp;5.2.
245
 
Features that are unlikely to break existing code are unconditionally
246
 
enabled:
247
 
</p>
248
 
<ul>
249
 
<li><tt>goto</tt> and <tt>::labels::</tt>.</li>
250
 
<li>Hex escapes <tt>'\x3F'</tt> and <tt>'\*'</tt> escape in strings.</li>
251
 
<li><tt>load(string|reader [, chunkname [,mode [,env]]])</tt>.</li>
252
 
<li><tt>loadstring()</tt> is an alias for <tt>load()</tt>.</li>
253
 
<li><tt>loadfile(filename [,mode [,env]])</tt>.</li>
254
 
<li><tt>math.log(x [,base])</tt>.
255
 
<li><tt>string.rep(s, n [,sep])</tt>.
256
 
<li><tt>string.format()</tt>: <tt>%q</tt> reversible.
257
 
<tt>%s</tt> checks <tt>__tostring</tt>.
258
 
<tt>%a</tt> and <tt>"%A</tt> added.</li>
259
 
<li>String matching pattern <tt>%g</tt> added.</li>
260
 
<li><tt>io.read("*L")</tt>.</li>
261
 
<li><tt>io.lines()</tt> and <tt>file:lines()</tt> process
262
 
<tt>io.read()</tt> options.</li>
263
 
<li><tt>os.exit(status|true|false [,close])</tt>.</li>
264
 
<li><tt>package.searchpath(name, path [, sep [, rep]])</tt>.</li>
265
 
<li><tt>package.loadlib(name, "*")</tt>.</li>
266
 
<li><tt>debug.getinfo()</tt> returns <tt>nparams</tt> and <tt>isvararg</tt>
267
 
for option <tt>"u"</tt>.</li>
268
 
<li><tt>debug.getlocal()</tt> accepts function instead of level.</li>
269
 
<li><tt>debug.getlocal()</tt> and <tt>debug.setlocal()</tt> accept negative
270
 
indexes for varargs.</li>
271
 
<li><tt>debug.getupvalue()</tt> and <tt>debug.setupvalue()</tt> handle
272
 
C&nbsp;functions.</li>
273
 
<li><tt>debug.upvalueid()</tt> and <tt>debug.upvaluejoin()</tt>.</li>
274
 
<li>Command line option <tt>-E</tt>.</li>
275
 
<li>Command line checks <tt>__tostring</tt> for errors.</li>
276
 
</ul>
277
 
<p>
278
 
Other features are only enabled, if LuaJIT is built with
279
 
<tt>-DLUAJIT_ENABLE_LUA52COMPAT</tt>:
280
 
</p>
281
 
<ul>
282
 
<li><tt>goto</tt> is a keyword and not a valid variable name anymore.</li>
283
 
<li><tt>break</tt> can be placed anywhere. Empty statements (<tt>;;</tt>)
284
 
are allowed.</li>
285
 
<li><tt>__lt</tt>, <tt>__le</tt> are invoked for mixed types.</li>
286
 
<li><tt>__len</tt> for tables. <tt>rawlen()</tt> library function.</li>
287
 
<li><tt>pairs()</tt> and <tt>ipairs()</tt> check for <tt>__pairs</tt> and
288
 
<tt>__ipairs</tt>.</li>
289
 
<li><tt>coroutine.running()</tt> returns two results.</li>
290
 
<li><tt>table.pack()</tt> and <tt>table.unpack()</tt>
291
 
(same as <tt>unpack()</tt>).</li>
292
 
<li><tt>io.write()</tt> and <tt>file:write()</tt> return file handle
293
 
instead of <tt>true</tt>.</li>
294
 
<li><tt>os.execute()</tt> and <tt>pipe:close()</tt> return detailed
295
 
exit status.</li>
296
 
<li><tt>debug.setmetatable()</tt> returns object.</li>
297
 
<li><tt>debug.getuservalue()</tt> and <tt>debug.setuservalue()</tt>.</li>
298
 
<li>Remove <tt>math.mod()</tt>, <tt>string.gfind()</tt>.
299
 
</ul>
300
 
<p>
301
 
Note: this provides only partial compatibility with Lua 5.2 at the
302
 
language and Lua library level. LuaJIT is API+ABI-compatible with
303
 
Lua&nbsp;5.1, which prevents implementing features that would otherwise
304
 
break the Lua/C API and ABI (e.g. <tt>_ENV</tt>).
305
 
</p>
306
 
 
307
 
<h2 id="exceptions">C++ Exception Interoperability</h2>
308
 
<p>
309
 
LuaJIT has built-in support for interoperating with C++&nbsp;exceptions.
310
 
The available range of features depends on the target platform and
311
 
the toolchain used to compile LuaJIT:
312
 
</p>
313
 
<table class="exc">
314
 
<tr class="exchead">
315
 
<td class="excplatform">Platform</td>
316
 
<td class="exccompiler">Compiler</td>
317
 
<td class="excinterop">Interoperability</td>
318
 
</tr>
319
 
<tr class="odd separate">
320
 
<td class="excplatform">POSIX/x64, DWARF2 unwinding</td>
321
 
<td class="exccompiler">GCC 4.3+</td>
322
 
<td class="excinterop"><b style="color: #00a000;">Full</b></td>
323
 
</tr>
324
 
<tr class="even">
325
 
<td class="excplatform">Other platforms, DWARF2 unwinding</td>
326
 
<td class="exccompiler">GCC</td>
327
 
<td class="excinterop"><b style="color: #c06000;">Limited</b></td>
328
 
</tr>
329
 
<tr class="odd">
330
 
<td class="excplatform">Windows/x64</td>
331
 
<td class="exccompiler">MSVC or WinSDK</td>
332
 
<td class="excinterop"><b style="color: #00a000;">Full</b></td>
333
 
</tr>
334
 
<tr class="even">
335
 
<td class="excplatform">Windows/x86</td>
336
 
<td class="exccompiler">Any</td>
337
 
<td class="excinterop"><b style="color: #a00000;">No</b></td>
338
 
</tr>
339
 
<tr class="odd">
340
 
<td class="excplatform">Other platforms</td>
341
 
<td class="exccompiler">Other compilers</td>
342
 
<td class="excinterop"><b style="color: #a00000;">No</b></td>
343
 
</tr>
344
 
</table>
345
 
<p>
346
 
<b style="color: #00a000;">Full interoperability</b> means:
347
 
</p>
348
 
<ul>
349
 
<li>C++&nbsp;exceptions can be caught on the Lua side with <tt>pcall()</tt>,
350
 
<tt>lua_pcall()</tt> etc.</li>
351
 
<li>C++&nbsp;exceptions will be converted to the generic Lua error
352
 
<tt>"C++&nbsp;exception"</tt>, unless you use the
353
 
<a href="ext_c_api.html#mode_wrapcfunc">C&nbsp;call wrapper</a> feature.</li>
354
 
<li>It's safe to throw C++&nbsp;exceptions across non-protected Lua frames
355
 
on the C&nbsp;stack. The contents of the C++&nbsp;exception object
356
 
pass through unmodified.</li>
357
 
<li>Lua errors can be caught on the C++ side with <tt>catch(...)</tt>.
358
 
The corresponding Lua error message can be retrieved from the Lua stack.</li>
359
 
<li>Throwing Lua errors across C++ frames is safe. C++ destructors
360
 
will be called.</li>
361
 
</ul>
362
 
<p>
363
 
<b style="color: #c06000;">Limited interoperability</b> means:
364
 
</p>
365
 
<ul>
366
 
<li>C++&nbsp;exceptions can be caught on the Lua side with <tt>pcall()</tt>,
367
 
<tt>lua_pcall()</tt> etc.</li>
368
 
<li>C++&nbsp;exceptions will be converted to the generic Lua error
369
 
<tt>"C++&nbsp;exception"</tt>, unless you use the
370
 
<a href="ext_c_api.html#mode_wrapcfunc">C&nbsp;call wrapper</a> feature.</li>
371
 
<li>C++&nbsp;exceptions will be caught by non-protected Lua frames and
372
 
are rethrown as a generic Lua error. The C++&nbsp;exception object will
373
 
be destroyed.</li>
374
 
<li>Lua errors <b>cannot</b> be caught on the C++ side.</li>
375
 
<li>Throwing Lua errors across C++ frames will <b>not</b> call
376
 
C++ destructors.</li>
377
 
</ul>
378
 
 
379
 
<p>
380
 
<b style="color: #a00000;">No interoperability</b> means:
381
 
</p>
382
 
<ul>
383
 
<li>It's <b>not</b> safe to throw C++&nbsp;exceptions across Lua frames.</li>
384
 
<li>C++&nbsp;exceptions <b>cannot</b> be caught on the Lua side.</li>
385
 
<li>Lua errors <b>cannot</b> be caught on the C++ side.</li>
386
 
<li>Throwing Lua errors across C++ frames will <b>not</b> call
387
 
C++ destructors.</li>
388
 
<li>Additionally, on Windows/x86 with SEH-based C++&nbsp;exceptions:
389
 
it's <b>not</b> safe to throw a Lua error across any frames containing
390
 
a C++ function with any try/catch construct or using variables with
391
 
(implicit) destructors. This also applies to any functions which may be
392
 
inlined in such a function. It doesn't matter whether <tt>lua_error()</tt>
393
 
is called inside or outside of a try/catch or whether any object actually
394
 
needs to be destroyed: the SEH chain is corrupted and this will eventually
395
 
lead to the termination of the process.</li>
396
 
</ul>
397
 
<br class="flush">
398
 
</div>
399
 
<div id="foot">
400
 
<hr class="hide">
401
 
Copyright &copy; 2005-2013 Mike Pall
402
 
<span class="noprint">
403
 
&middot;
404
 
<a href="contact.html">Contact</a>
405
 
</span>
406
 
</div>
407
 
</body>
408
 
</html>