status.html 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  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-2010, 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><li>
  30. <a href="api.html">API Extensions</a>
  31. </li></ul>
  32. </li><li>
  33. <a class="current" href="status.html">Status</a>
  34. <ul><li>
  35. <a href="changes.html">Changes</a>
  36. </li></ul>
  37. </li><li>
  38. <a href="faq.html">FAQ</a>
  39. </li><li>
  40. <a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
  41. </li></ul>
  42. </div>
  43. <div id="main">
  44. <p>
  45. The <span style="color: #0000c0;">LuaJIT 1.x</span> series represents
  46. the current <span style="color: #0000c0;">stable branch</span>. As of
  47. this writing there have been no open bugs since about a year. So, if
  48. you need a rock-solid VM, you are encouraged to fetch the latest
  49. release of LuaJIT 1.x from the <a href="http://luajit.org/download.html"><span class="ext">&raquo;</span>&nbsp;Download</a>
  50. page.
  51. </p>
  52. <p>
  53. <span style="color: #c00000;">LuaJIT 2.0</span> is the currently active
  54. <span style="color: #c00000;">development branch</span>.
  55. It has <b>Beta Test</b> status and is still undergoing
  56. substantial changes. It's maturing quickly, so you should definitely
  57. start to evaluate it for new projects right now.
  58. </p>
  59. <h2>Current Status</h2>
  60. <p>
  61. This is a list of the things you should know about the LuaJIT 2.0 beta test:
  62. </p>
  63. <ul>
  64. <li>
  65. The JIT compiler only generates code for CPUs with support for
  66. <b>SSE2</b> instructions. I.e. you need at least a P4, Core 2/i5/i7
  67. or K8/K10 to get the full benefit.<br>
  68. If you run LuaJIT on older CPUs without SSE2 support, the JIT compiler
  69. is disabled and the VM falls back to the interpreter.
  70. Run the command line executable without arguments to show the current status
  71. (<tt>JIT: ON</tt> or <tt>JIT: OFF</tt>).
  72. </li>
  73. <li>
  74. Obviously there will be many <b>bugs</b> in a VM which has been
  75. rewritten from the ground up. Please report your findings together with
  76. the circumstances needed to reproduce the bug. If possible reduce the
  77. problem down to a simple test cases.<br>
  78. There is no formal bug tracker at the moment. The best place for
  79. discussion is the
  80. <a href="http://www.lua.org/lua-l.html"><span class="ext">&raquo;</span>&nbsp;Lua mailing list</a>. Of course
  81. you may also send your bug report directly to me, especially when they
  82. contains lengthy debug output. Please check the
  83. <a href="contact.html">Contact</a> page for details.
  84. </li>
  85. <li>
  86. The VM is complete in the sense that it <b>should</b> run all Lua code
  87. just fine. It's considered a serious bug if the VM crashes or produces
  88. unexpected results &mdash; please report it. There are only very few
  89. known incompatibilities with standard Lua:
  90. <ul>
  91. <li>
  92. The Lua <b>debug API</b> is missing a couple of features (return
  93. hooks for non-Lua functions) and shows slightly different behavior
  94. (no per-coroutine hooks, no tail call counting).
  95. </li>
  96. <li>
  97. <b>Bytecode</b> currently cannot be loaded or dumped. Note that
  98. the bytecode format differs from Lua&nbsp;5.1 &mdash; loading foreign
  99. bytecode is not supported at all.
  100. </li>
  101. <li>
  102. Some of the <b>configuration options</b> of Lua&nbsp;5.1 are not supported:
  103. <ul>
  104. <li>The <b>number type</b> cannot be changed (it's always a <tt>double</tt>).</li>
  105. <li>The stand-alone executable cannot be linked with <b>readline</b>
  106. to enable line editing. It's planned to add support for loading it
  107. on-demand.</li>
  108. </ul>
  109. </li>
  110. <li>
  111. Most other issues you're likely to find (e.g. with the existing test
  112. suites) are differences in the <b>implementation-defined</b> behavior.
  113. These either have a good reason (like early tail call resolving which
  114. may cause differences in error reporting), are arbitrary design choices
  115. or are due to quirks in the VM. The latter cases may get fixed if a
  116. demonstrable need is shown.
  117. </li>
  118. </ul>
  119. </li>
  120. <li>
  121. The <b>JIT compiler</b> is not complete (yet) and falls back to the
  122. interpreter in some cases. All of this works transparently, so unless
  123. you use <tt>-jv</tt>, you'll probably never notice (the interpreter is quite
  124. fast, too). Here are the known issues:
  125. <ul>
  126. <li>
  127. Many known issues cause a <b>NYI</b> (not yet implemented) trace abort
  128. message. E.g. for calls to vararg functions or many string library
  129. functions. Reporting these is only mildly useful, except if you have good
  130. example code that shows the problem. Obviously, reports accompanied with
  131. a patch to fix the issue are more than welcome. But please check back
  132. with me, before writing major improvements, to avoid duplication of
  133. effort.
  134. </li>
  135. <li>
  136. The trace compiler currently does not back off specialization for
  137. function call dispatch. It should really fall back to specializing on
  138. the prototype, not the closure identity. This can lead to the so-called
  139. "trace explosion" problem with <b>closure-heavy programming</b>. The
  140. trace linking heuristics prevent this, but in the worst case this
  141. means the code always falls back to the interpreter.
  142. </li>
  143. <li>
  144. <b>Trace management</b> needs more tuning: less drastic countermeasures
  145. against trace explosion and better heuristics in general.
  146. </li>
  147. <li>
  148. Some checks are missing in the JIT-compiled code for obscure situations
  149. with <b>open upvalues aliasing</b> one of the SSA slots later on (or
  150. vice versa). Bonus points, if you can find a real world test case for
  151. this.
  152. </li>
  153. <li>
  154. Currently some <b>out-of-memory</b> errors from <b>on-trace code</b> are not
  155. handled correctly. The error may fall through an on-trace
  156. <tt>pcall</tt> (x86) or it may be passed on to the function set with
  157. <tt>lua_atpanic</tt> (x64).
  158. </li>
  159. </ul>
  160. </li>
  161. </ul>
  162. <h2>Roadmap</h2>
  163. <p>
  164. Rather than stating exact release dates (I'm well known for making
  165. spectacularly wrong guesses), this roadmap lists the general project
  166. plan, sorted by priority, as well as ideas for the future:
  167. </p>
  168. <ul>
  169. <li>
  170. The main goal right now is to stabilize LuaJIT 2.0 and get it out of
  171. beta test. <b>Correctness</b> has priority over completeness. This
  172. implies the first stable release will certainly NOT compile every
  173. library function call and will fall back to the interpreter from time
  174. to time. This is perfectly ok, since it still executes all Lua code,
  175. just not at the highest possible speed.
  176. </li>
  177. <li>
  178. The next step is to get it to compile more library functions and handle
  179. more cases where the compiler currently bails out. This doesn't mean it
  180. will compile every corner case. It's much more important that it
  181. performs well in a majority of use cases. Every compiler has to make
  182. these trade-offs &mdash; <b>completeness</b> just cannot be the
  183. overriding goal for a low-footprint, low-overhead JIT compiler.
  184. </li>
  185. <li>
  186. More <b>optimizations</b> will be added in parallel to the last step on
  187. an as-needed basis. Array-bounds-check (ABC) removal, sinking of stores
  188. to aggregates and sinking of allocations are high on the list. Faster
  189. handling of NEWREF and better alias analysis are desirable, too. More
  190. complex optimizations with less pay-off, such as value-range-propagation
  191. (VRP) will have to wait.
  192. </li>
  193. <li>
  194. LuaJIT 2.0 has been designed with <b>portability</b> in mind.
  195. Nonetheless, it compiles to native code and needs to be adapted to each
  196. architecture. Porting the compiler backend is probably the easier task,
  197. but a key element of its design is the fast interpreter, written in
  198. machine-specific assembler.<br>
  199. An x64 port is already available, thanks to the
  200. <a href="sponsors.html">LuaJIT sponsorship program</a>.
  201. Other ports will follow &mdash; companies which are
  202. interested in sponsoring a port to a particular architecture, please
  203. use the given contact address.
  204. </li>
  205. <li>
  206. <b>Documentation</b> about the <b>internals</b> of LuaJIT is still sorely
  207. missing. Although the source code is included and is IMHO well
  208. commented, many basic design decisions are in need of an explanation.
  209. The rather un-traditional compiler architecture and the many highly
  210. optimized data structures are a barrier for outside participation in
  211. the development. Alas, as I've repeatedly stated, I'm better at
  212. writing code than papers and I'm not in need of any academical merits.
  213. Someday I will find the time for it. :-)
  214. </li>
  215. <li>
  216. Producing good code for unbiased branches is a key problem for trace
  217. compilers. This is the main cause for "trace explosion".
  218. <b>Hyperblock scheduling</b> promises to solve this nicely at the
  219. price of a major redesign of the compiler. This would also pave the
  220. way for emitting predicated instructions, which is a prerequisite
  221. for efficient <b>vectorization</b>.
  222. </li>
  223. <li>
  224. Currently Lua is missing a standard library for access to <b>structured
  225. binary data</b> and <b>arrays/buffers</b> holding low-level data types.
  226. Allowing calls to arbitrary C functions (<b>FFI</b>) would obviate the
  227. need to write manual bindings. A variety of extension modules is floating
  228. around, with different scope and capabilities. Alas, none of them has been
  229. designed with a JIT compiler in mind.
  230. </li>
  231. </ul>
  232. <br class="flush">
  233. </div>
  234. <div id="foot">
  235. <hr class="hide">
  236. Copyright &copy; 2005-2010 Mike Pall
  237. <span class="noprint">
  238. &middot;
  239. <a href="contact.html">Contact</a>
  240. </span>
  241. </div>
  242. </body>
  243. </html>