extensions.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  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-2012, 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="install.html">Installation</a>
  41. </li><li>
  42. <a href="running.html">Running</a>
  43. </li></ul>
  44. </li><li>
  45. <a class="current" href="extensions.html">Extensions</a>
  46. <ul><li>
  47. <a href="ext_ffi.html">FFI Library</a>
  48. <ul><li>
  49. <a href="ext_ffi_tutorial.html">FFI Tutorial</a>
  50. </li><li>
  51. <a href="ext_ffi_api.html">ffi.* API</a>
  52. </li><li>
  53. <a href="ext_ffi_semantics.html">FFI Semantics</a>
  54. </li></ul>
  55. </li><li>
  56. <a href="ext_jit.html">jit.* Library</a>
  57. </li><li>
  58. <a href="ext_c_api.html">Lua/C API</a>
  59. </li></ul>
  60. </li><li>
  61. <a href="status.html">Status</a>
  62. <ul><li>
  63. <a href="changes.html">Changes</a>
  64. </li></ul>
  65. </li><li>
  66. <a href="faq.html">FAQ</a>
  67. </li><li>
  68. <a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
  69. </li><li>
  70. <a href="http://luajit.org/download.html">Download <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 that 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. <h2 id="modules">Extensions Modules</h2>
  98. <p>
  99. LuaJIT comes with several built-in extension modules:
  100. </p>
  101. <h3 id="bit"><tt>bit.*</tt> &mdash; Bitwise operations</h3>
  102. <p>
  103. LuaJIT supports all bitwise operations as defined by
  104. <a href="http://bitop.luajit.org"><span class="ext">&raquo;</span>&nbsp;Lua BitOp</a>:
  105. </p>
  106. <pre class="code">
  107. bit.tobit bit.tohex bit.bnot bit.band bit.bor bit.bxor
  108. bit.lshift bit.rshift bit.arshift bit.rol bit.ror bit.bswap
  109. </pre>
  110. <p>
  111. This module is a LuaJIT built-in &mdash; you don't need to download or
  112. install Lua BitOp. The Lua BitOp site has full documentation for all
  113. <a href="http://bitop.luajit.org/api.html"><span class="ext">&raquo;</span>&nbsp;Lua BitOp API functions</a>.
  114. </p>
  115. <p>
  116. Please make sure to <tt>require</tt> the module before using any of
  117. its functions:
  118. </p>
  119. <pre class="code">
  120. local bit = require("bit")
  121. </pre>
  122. <p>
  123. An already installed Lua BitOp module is ignored by LuaJIT.
  124. This way you can use bit operations from both Lua and LuaJIT on a
  125. shared installation.
  126. </p>
  127. <h3 id="ffi"><tt>ffi.*</tt> &mdash; FFI library</h3>
  128. <p>
  129. The <a href="ext_ffi.html">FFI library</a> allows calling external
  130. C&nbsp;functions and the use of C&nbsp;data structures from pure Lua
  131. code.
  132. </p>
  133. <h3 id="jit"><tt>jit.*</tt> &mdash; JIT compiler control</h3>
  134. <p>
  135. The functions in this module
  136. <a href="ext_jit.html">control the behavior of the JIT compiler engine</a>.
  137. </p>
  138. <h3 id="c_api">C API extensions</h3>
  139. <p>
  140. LuaJIT adds some
  141. <a href="ext_c_api.html">extra functions to the Lua/C API</a>.
  142. </p>
  143. <h2 id="library">Enhanced Standard Library Functions</h2>
  144. <h3 id="xpcall"><tt>xpcall(f, err [,args...])</tt> passes arguments</h3>
  145. <p>
  146. Unlike the standard implementation in Lua 5.1, <tt>xpcall()</tt>
  147. passes any arguments after the error function to the function
  148. which is called in a protected context.
  149. </p>
  150. <h3 id="load"><tt>loadfile()</tt> etc. handle UTF-8 source code</h3>
  151. <p>
  152. Non-ASCII characters are handled transparently by the Lua source code parser.
  153. This allows the use of UTF-8 characters in identifiers and strings.
  154. A UTF-8 BOM is skipped at the start of the source code.
  155. </p>
  156. <h3 id="tostring"><tt>tostring()</tt> etc. canonicalize NaN and &plusmn;Inf</h3>
  157. <p>
  158. All number-to-string conversions consistently convert non-finite numbers
  159. to the same strings on all platforms. NaN results in <tt>"nan"</tt>,
  160. positive infinity results in <tt>"inf"</tt> and negative infinity results
  161. in <tt>"-inf"</tt>.
  162. </p>
  163. <h3 id="string_dump"><tt>string.dump(f [,strip])</tt> generates portable bytecode</h3>
  164. <p>
  165. An extra argument has been added to <tt>string.dump()</tt>. If set to
  166. <tt>true</tt>, 'stripped' bytecode without debug information is
  167. generated. This speeds up later bytecode loading and reduces memory
  168. usage. See also the
  169. <a href="running.html#opt_b"><tt>-b</tt> command line option</a>.
  170. </p>
  171. <p>
  172. The generated bytecode is portable and can be loaded on any architecture
  173. that LuaJIT supports, independent of word size or endianess. However the
  174. bytecode compatibility versions must match. Bytecode stays compatible
  175. for dot releases (x.y.0 &rarr; x.y.1), but may change with major or
  176. minor releases (2.0 &rarr; 2.1) or between any beta release. Foreign
  177. bytecode (e.g. from Lua 5.1) is incompatible and cannot be loaded.
  178. </p>
  179. <h3 id="math_random">Enhanced PRNG for <tt>math.random()</tt></h3>
  180. <p>
  181. LuaJIT uses a Tausworthe PRNG with period 2^223 to implement
  182. <tt>math.random()</tt> and <tt>math.randomseed()</tt>. The quality of
  183. the PRNG results is much superior compared to the standard Lua
  184. implementation which uses the platform-specific ANSI rand().
  185. </p>
  186. <p>
  187. The PRNG generates the same sequences from the same seeds on all
  188. platforms and makes use of all bits in the seed argument.
  189. <tt>math.random()</tt> without arguments generates 52 pseudo-random bits
  190. for every call. The result is uniformly distributed between 0 and 1.
  191. It's correctly scaled up and rounded for <tt>math.random(n&nbsp;[,m])</tt> to
  192. preserve uniformity.
  193. </p>
  194. <h3 id="io"><tt>io.*</tt> functions handle 64&nbsp;bit file offsets</h3>
  195. <p>
  196. The file I/O functions in the standard <tt>io.*</tt> library handle
  197. 64&nbsp;bit file offsets. In particular this means it's possible
  198. to open files larger than 2&nbsp;Gigabytes and to reposition or obtain
  199. the current file position for offsets beyond 2&nbsp;GB
  200. (<tt>fp:seek()</tt> method).
  201. </p>
  202. <h3 id="debug_meta"><tt>debug.*</tt> functions identify metamethods</h3>
  203. <p>
  204. <tt>debug.getinfo()</tt> and <tt>lua_getinfo()</tt> also return information
  205. about invoked metamethods. The <tt>namewhat</tt> field is set to
  206. <tt>"metamethod"</tt> and the <tt>name</tt> field has the name of
  207. the corresponding metamethod (e.g. <tt>"__index"</tt>).
  208. </p>
  209. <h2 id="resumable">Fully Resumable VM</h2>
  210. <p>
  211. The LuaJIT 2.x VM is fully resumable. This means you can yield from a
  212. coroutine even across contexts, where this would not possible with
  213. the standard Lua&nbsp;5.1 VM: e.g. you can yield across <tt>pcall()</tt>
  214. and <tt>xpcall()</tt>, across iterators and across metamethods.
  215. </p>
  216. <p>
  217. Note however that LuaJIT 2.x doesn't use
  218. <a href="http://coco.luajit.org/"><span class="ext">&raquo;</span>&nbsp;Coco</a> anymore. This means the
  219. overhead for creating coroutines is much smaller and no extra
  220. C&nbsp;stacks need to be allocated. OTOH you can no longer yield
  221. across arbitrary C&nbsp;functions. Keep this in mind when
  222. upgrading from LuaJIT 1.x.
  223. </p>
  224. <h2 id="exceptions">C++ Exception Interoperability</h2>
  225. <p>
  226. LuaJIT has built-in support for interoperating with C++&nbsp;exceptions.
  227. The available range of features depends on the target platform and
  228. the toolchain used to compile LuaJIT:
  229. </p>
  230. <table class="exc">
  231. <tr class="exchead">
  232. <td class="excplatform">Platform</td>
  233. <td class="exccompiler">Compiler</td>
  234. <td class="excinterop">Interoperability</td>
  235. </tr>
  236. <tr class="odd separate">
  237. <td class="excplatform">POSIX/x64, DWARF2 unwinding</td>
  238. <td class="exccompiler">GCC 4.3+</td>
  239. <td class="excinterop"><b style="color: #00a000;">Full</b></td>
  240. </tr>
  241. <tr class="even">
  242. <td class="excplatform">Other platforms, DWARF2 unwinding</td>
  243. <td class="exccompiler">GCC</td>
  244. <td class="excinterop"><b style="color: #c06000;">Limited</b></td>
  245. </tr>
  246. <tr class="odd">
  247. <td class="excplatform">Windows/x64</td>
  248. <td class="exccompiler">MSVC or WinSDK</td>
  249. <td class="excinterop"><b style="color: #00a000;">Full</b></td>
  250. </tr>
  251. <tr class="even">
  252. <td class="excplatform">Windows/x86</td>
  253. <td class="exccompiler">Any</td>
  254. <td class="excinterop"><b style="color: #a00000;">No</b></td>
  255. </tr>
  256. <tr class="odd">
  257. <td class="excplatform">Other platforms</td>
  258. <td class="exccompiler">Other compilers</td>
  259. <td class="excinterop"><b style="color: #a00000;">No</b></td>
  260. </tr>
  261. </table>
  262. <p>
  263. <b style="color: #00a000;">Full interoperability</b> means:
  264. </p>
  265. <ul>
  266. <li>C++&nbsp;exceptions can be caught on the Lua side with <tt>pcall()</tt>,
  267. <tt>lua_pcall()</tt> etc.</li>
  268. <li>C++&nbsp;exceptions will be converted to the generic Lua error
  269. <tt>"C++&nbsp;exception"</tt>, unless you use the
  270. <a href="ext_c_api.html#mode_wrapcfunc">C&nbsp;call wrapper</a> feature.</li>
  271. <li>It's safe to throw C++&nbsp;exceptions across non-protected Lua frames
  272. on the C&nbsp;stack. The contents of the C++&nbsp;exception object
  273. pass through unmodified.</li>
  274. <li>Lua errors can be caught on the C++ side with <tt>catch(...)</tt>.
  275. The corresponding Lua error message can be retrieved from the Lua stack.</li>
  276. <li>Throwing Lua errors across C++ frames is safe. C++ destructors
  277. will be called.</li>
  278. </ul>
  279. <p>
  280. <b style="color: #c06000;">Limited interoperability</b> means:
  281. </p>
  282. <ul>
  283. <li>C++&nbsp;exceptions can be caught on the Lua side with <tt>pcall()</tt>,
  284. <tt>lua_pcall()</tt> etc.</li>
  285. <li>C++&nbsp;exceptions will be converted to the generic Lua error
  286. <tt>"C++&nbsp;exception"</tt>, unless you use the
  287. <a href="ext_c_api.html#mode_wrapcfunc">C&nbsp;call wrapper</a> feature.</li>
  288. <li>C++&nbsp;exceptions will be caught by non-protected Lua frames and
  289. are rethrown as a generic Lua error. The C++&nbsp;exception object will
  290. be destroyed.</li>
  291. <li>Lua errors <b>cannot</b> be caught on the C++ side.</li>
  292. <li>Throwing Lua errors across C++ frames will <b>not</b> call
  293. C++ destructors.</li>
  294. </ul>
  295. <p>
  296. <b style="color: #a00000;">No interoperability</b> means:
  297. </p>
  298. <ul>
  299. <li>It's <b>not</b> safe to throw C++&nbsp;exceptions across Lua frames.</li>
  300. <li>C++&nbsp;exceptions <b>cannot</b> be caught on the Lua side.</li>
  301. <li>Lua errors <b>cannot</b> be caught on the C++ side.</li>
  302. <li>Throwing Lua errors across C++ frames will <b>not</b> call
  303. C++ destructors.</li>
  304. <li>Additionally, on Windows/x86 with SEH-based C++&nbsp;exceptions:
  305. it's <b>not</b> safe to throw a Lua error across any frames containing
  306. a C++ function with any try/catch construct or using variables with
  307. (implicit) destructors. This also applies to any functions which may be
  308. inlined in such a function. It doesn't matter whether <tt>lua_error()</tt>
  309. is called inside or outside of a try/catch or whether any object actually
  310. needs to be destroyed: the SEH chain is corrupted and this will eventually
  311. lead to the termination of the process.</li>
  312. </ul>
  313. <br class="flush">
  314. </div>
  315. <div id="foot">
  316. <hr class="hide">
  317. Copyright &copy; 2005-2012 Mike Pall
  318. <span class="noprint">
  319. &middot;
  320. <a href="contact.html">Contact</a>
  321. </span>
  322. </div>
  323. </body>
  324. </html>