status.html 9.7 KB

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