2
0

status.html 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <head>
  4. <title>Status &amp; Roadmap</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. ul li { padding-bottom: 0.3em; }
  13. </style>
  14. </head>
  15. <body>
  16. <div id="site">
  17. <a href="http://luajit.org"><span>Lua<span id="logo">JIT</span></span></a>
  18. </div>
  19. <div id="head">
  20. <h1>Status &amp; Roadmap</h1>
  21. </div>
  22. <div id="nav">
  23. <ul><li>
  24. <a href="luajit.html">LuaJIT</a>
  25. <ul><li>
  26. <a href="install.html">Installation</a>
  27. </li><li>
  28. <a href="running.html">Running</a>
  29. </li></ul>
  30. </li><li>
  31. <a href="extensions.html">Extensions</a>
  32. <ul><li>
  33. <a href="ext_ffi.html">FFI Library</a>
  34. <ul><li>
  35. <a href="ext_ffi_tutorial.html">FFI Tutorial</a>
  36. </li><li>
  37. <a href="ext_ffi_api.html">ffi.* API</a>
  38. </li><li>
  39. <a href="ext_ffi_semantics.html">FFI Semantics</a>
  40. </li></ul>
  41. </li><li>
  42. <a href="ext_jit.html">jit.* Library</a>
  43. </li><li>
  44. <a href="ext_c_api.html">Lua/C API</a>
  45. </li></ul>
  46. </li><li>
  47. <a class="current" href="status.html">Status</a>
  48. <ul><li>
  49. <a href="changes.html">Changes</a>
  50. </li></ul>
  51. </li><li>
  52. <a href="faq.html">FAQ</a>
  53. </li><li>
  54. <a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
  55. </li><li>
  56. <a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
  57. </li><li>
  58. <a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
  59. </li><li>
  60. <a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
  61. </li></ul>
  62. </div>
  63. <div id="main">
  64. <p>
  65. The <span style="color: #0000c0;">LuaJIT 1.x</span> series represents
  66. the current <span style="color: #0000c0;">stable branch</span>.
  67. Only a single bug has been discovered in the last three years. So, if
  68. you need a rock-solid VM, you are encouraged to fetch the latest
  69. release of LuaJIT 1.x from the <a href="http://luajit.org/download.html"><span class="ext">&raquo;</span>&nbsp;Download</a>
  70. page.
  71. </p>
  72. <p>
  73. <span style="color: #c00000;">LuaJIT 2.0</span> is the currently active
  74. <span style="color: #c00000;">development branch</span>.
  75. It still has <b>Beta Test</b> status, but it's not undergoing substantial
  76. changes anymore.
  77. It has <a href="http://luajit.org/performance.html"><span class="ext">&raquo;</span>&nbsp;much better performance</a> than LuaJIT 1.x.
  78. It's nearly feature-complete, so you should definitely
  79. start to evaluate it for new projects right now.
  80. </p>
  81. <h2>Current Status</h2>
  82. <p>
  83. This is a list of the things you should know about the LuaJIT 2.0 beta test:
  84. </p>
  85. <ul>
  86. <li>
  87. Obviously there will be some <b>bugs</b> in a VM which has been
  88. rewritten from the ground up. Please report your findings together with
  89. the circumstances needed to reproduce the bug. If possible, reduce the
  90. problem down to a simple test case.<br>
  91. There is no formal bug tracker at the moment. The best place for
  92. discussion is the <a href="http://luajit.org/list.html"><span class="ext">&raquo;</span>&nbsp;LuaJIT mailing list</a>. Of course
  93. you may also send your bug reports <a href="contact.html">directly to me</a>,
  94. especially when they contain lengthy debug output or if you require
  95. confidentiality.
  96. </li>
  97. <li>
  98. The x86 JIT compiler only generates code for CPUs with support for
  99. <b>SSE2</b> instructions. I.e. you need at least a P4, Core 2/i3/i5/i7,
  100. Atom or K8/K10 to get the full benefit.<br>
  101. If you run LuaJIT on older CPUs without SSE2 support, the JIT compiler
  102. is disabled and the VM falls back to the LuaJIT interpreter. This is faster
  103. than the Lua interpreter, but not nearly as fast as the JIT compiler of course.
  104. Run the command line executable without arguments to show the current status
  105. (<tt>JIT: ON</tt> or <tt>JIT: OFF</tt>).
  106. </li>
  107. <li>
  108. The VM is complete in the sense that it <b>should</b> run all Lua code
  109. just fine. It's considered a serious bug if the VM crashes or produces
  110. unexpected results &mdash; please report this. There are only very few
  111. known incompatibilities with standard Lua:
  112. <ul>
  113. <li>
  114. The Lua <b>debug API</b> is missing a couple of features (return
  115. hooks for non-Lua functions) and shows slightly different behavior
  116. (no per-coroutine hooks, no tail call counting).
  117. </li>
  118. <li>
  119. Some of the <b>configuration options</b> of Lua&nbsp;5.1 are not supported:
  120. <ul>
  121. <li>The <b>number type</b> cannot be changed (it's always a <tt>double</tt>).</li>
  122. <li>The stand-alone executable cannot be linked with <b>readline</b>
  123. to enable line editing. It's planned to add support for loading it
  124. on-demand.</li>
  125. </ul>
  126. </li>
  127. <li>
  128. Most other issues you're likely to find (e.g. with the existing test
  129. suites) are differences in the <b>implementation-defined</b> behavior.
  130. These either have a good reason (like early tail call resolving which
  131. may cause differences in error reporting), are arbitrary design choices
  132. or are due to quirks in the VM. The latter cases may get fixed if a
  133. demonstrable need is shown.
  134. </li>
  135. </ul>
  136. </li>
  137. <li>
  138. The <b>JIT compiler</b> falls back to the
  139. interpreter in some cases. All of this works transparently, so unless
  140. you use <tt>-jv</tt>, you'll probably never notice (the interpreter is
  141. <a href="http://luajit.org/performance.html"><span class="ext">&raquo;</span>&nbsp;quite fast</a>, too). Here are the known issues:
  142. <ul>
  143. <li>
  144. Most known issues cause a <b>NYI</b> (not yet implemented) trace abort
  145. message. E.g. for calls to some internal library
  146. functions. Reporting these is only mildly useful, except if you have good
  147. example code that shows the problem. Obviously, reports accompanied with
  148. a patch to fix the issue are more than welcome. But please check back
  149. with me, before writing major improvements, to avoid duplication of
  150. effort.
  151. </li>
  152. <li>
  153. Some checks are missing in the JIT-compiled code for obscure situations
  154. with <b>open upvalues aliasing</b> one of the SSA slots later on (or
  155. vice versa). Bonus points, if you can find a real world test case for
  156. this.
  157. </li>
  158. <li>
  159. Currently some <b>out-of-memory</b> errors from <b>on-trace code</b> are not
  160. handled correctly. The error may fall through an on-trace
  161. <tt>pcall</tt> (x86) or it may be passed on to the function set with
  162. <tt>lua_atpanic</tt> (x64).
  163. </li>
  164. </ul>
  165. </li>
  166. </ul>
  167. <h2>Roadmap</h2>
  168. <p>
  169. Please refer to the
  170. <a href="http://www.freelists.org/post/luajit/LuaJIT-Roadmap-20122013"><span class="ext">&raquo;</span>&nbsp;LuaJIT
  171. Roadmap 2012/2013</a> for the latest release plan. Here's the general
  172. project plan for LuaJIT 2.0:
  173. </p>
  174. <ul>
  175. <li>
  176. The main goal right now is to stabilize LuaJIT 2.0 and get it out of
  177. beta test. <b>Correctness</b> has priority over completeness. This
  178. implies the first stable release will certainly NOT compile every
  179. library function call and will fall back to the interpreter from time
  180. to time. This is perfectly ok, since it still executes all Lua code,
  181. just not at the highest possible speed.
  182. </li>
  183. <li>
  184. The next step is to get it to compile more library functions and handle
  185. more cases where the compiler currently bails out. This doesn't mean it
  186. will compile every corner case. It's much more important that it
  187. performs well in a majority of use cases. Every compiler has to make
  188. these trade-offs &mdash; <b>completeness</b> just cannot be the
  189. overriding goal for a low-footprint, low-overhead JIT compiler.
  190. </li>
  191. <li>
  192. More <b>optimizations</b> will be added in parallel to the last step on
  193. an as-needed basis. Sinking of stores
  194. to aggregates and sinking of allocations are high on the list.
  195. More complex optimizations with less pay-off, such as value-range-propagation
  196. (VRP) will have to wait.
  197. </li>
  198. <li>
  199. LuaJIT 2.0 has been designed with <b>portability</b> in mind.
  200. Nonetheless, it compiles to native code and needs to be adapted to each
  201. architecture. The two major work items are porting the the fast interpreter,
  202. which is written in assembler, and porting the compiler backend.
  203. Most other portability issues like endianess or 32 vs. 64&nbsp;bit CPUs
  204. have already been taken care of.<br>
  205. Several ports are already available, thanks to the
  206. <a href="http://luajit.org/sponsors.html"><span class="ext">&raquo;</span>&nbsp;LuaJIT sponsorship program</a>.
  207. More ports will follow in the future &mdash; companies which are
  208. interested in sponsoring a port to a particular architecture, please
  209. use the given contact address.
  210. </li>
  211. <li>
  212. <b>Documentation</b> about the <b>internals</b> of LuaJIT is still sorely
  213. missing. Although the source code is included and is IMHO well
  214. commented, many basic design decisions are in need of an explanation.
  215. The rather un-traditional compiler architecture and the many highly
  216. optimized data structures are a barrier for outside participation in
  217. the development. Alas, as I've repeatedly stated, I'm better at
  218. writing code than papers and I'm not in need of any academic merits.
  219. Someday I will find the time for it. :-)
  220. </li>
  221. <li>
  222. Producing good code for unbiased branches is a key problem for trace
  223. compilers. This is the main cause for "trace explosion".
  224. <b>Hyperblock scheduling</b> promises to solve this nicely at the
  225. price of a major redesign of the compiler. This would also pave the
  226. way for emitting predicated instructions, which is a prerequisite
  227. for efficient <b>vectorization</b>.
  228. </li>
  229. </ul>
  230. <br class="flush">
  231. </div>
  232. <div id="foot">
  233. <hr class="hide">
  234. Copyright &copy; 2005-2012 Mike Pall
  235. <span class="noprint">
  236. &middot;
  237. <a href="contact.html">Contact</a>
  238. </span>
  239. </div>
  240. </body>
  241. </html>