2
0

status.html 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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. </li>
  94. <li>
  95. Most other issues you're likely to find (e.g. with the existing test
  96. suites) are differences in the <b>implementation-defined</b> behavior.
  97. These either have a good reason (like early tail call resolving which
  98. may cause differences in error reporting), are arbitrary design choices
  99. or are due to quirks in the VM. The latter cases may get fixed if a
  100. demonstrable need is shown.
  101. </li>
  102. </ul>
  103. </li>
  104. <li>
  105. The <b>JIT compiler</b> is not complete (yet) and falls back to the
  106. interpreter in some cases. All of this works transparently, so unless
  107. you use -jv, you'll probably never notice (the interpreter is quite
  108. fast, too). Here are the known issues:
  109. <ul>
  110. <li>
  111. Many known issues cause a <b>NYI</b> (not yet implemented) trace abort
  112. message. E.g. for calls to vararg functions or many string library
  113. functions. Reporting these is only mildly useful, except if you have good
  114. example code that shows the problem. Obviously, reports accompanied with
  115. a patch to fix the issue are more than welcome. But please check back
  116. with me, before writing major improvements, to avoid duplication of
  117. effort.
  118. </li>
  119. <li>
  120. <b>Recursion</b> is not traced yet. Often no trace will be generated at
  121. all or some unroll limit will catch it and aborts the trace.
  122. </li>
  123. <li>
  124. The trace compiler currently does not back off specialization for
  125. function call dispatch. It should really fall back to specializing on
  126. the prototype, not the closure identity. This can lead to the so-called
  127. "trace explosion" problem with <b>closure-heavy programming</b>. The
  128. trace linking heuristics prevent this, but in the worst case this
  129. means the code always falls back to the interpreter.
  130. </li>
  131. <li>
  132. <b>Trace management</b> needs more tuning: better blacklisting of aborted
  133. traces, less drastic countermeasures against trace explosion and better
  134. heuristics in general.
  135. </li>
  136. <li>
  137. Some checks are missing in the JIT-compiled code for obscure situations
  138. with <b>open upvalues aliasing</b> one of the SSA slots later on (or
  139. vice versa). Bonus points, if you can find a real world test case for
  140. this.
  141. </li>
  142. </ul>
  143. </li>
  144. </ul>
  145. <h2>Roadmap</h2>
  146. <p>
  147. Rather than stating exact release dates (I'm well known for making
  148. spectacularly wrong guesses), this roadmap lists the general project
  149. plan, sorted by priority, as well as ideas for the future:
  150. </p>
  151. <ul>
  152. <li>
  153. The main goal right now is to stabilize LuaJIT 2.0 and get it out of
  154. beta test. <b>Correctness</b> has priority over completeness. This
  155. implies the first stable release will certainly NOT compile every
  156. library function call and will fall back to the interpreter from time
  157. to time. This is perfectly ok, since it still executes all Lua code,
  158. just not at the highest possible speed.
  159. </li>
  160. <li>
  161. The next step is to get it to compile more library functions and handle
  162. more cases where the compiler currently bails out. This doesn't mean it
  163. will compile every corner case. It's much more important that it
  164. performs well in a majority of use cases. Every compiler has to make
  165. these trade-offs &mdash; <b>completeness</b> just cannot be the
  166. overriding goal for a low-footprint, low-overhead JIT compiler.
  167. </li>
  168. <li>
  169. More <b>optimizations</b> will be added in parallel to the last step on
  170. an as-needed basis. Array-bounds-check (ABC) removal, sinking of stores
  171. to aggregates and sinking of allocations are high on the list. Faster
  172. handling of NEWREF and better alias analysis are desirable, too. More
  173. complex optimizations with less pay-off, such as value-range-propagation
  174. (VRP) will have to wait.
  175. </li>
  176. <li>
  177. LuaJIT 2.0 has been designed with <b>portability</b> in mind.
  178. Nonetheless, it compiles to native code and needs to be adapted to each
  179. architecture. Porting the compiler backend is probably the easier task,
  180. but a key element of its design is the fast interpreter, written in
  181. machine-specific assembler.<br>
  182. The code base and the internal structures are already prepared for
  183. easier porting to 64 bit architectures. The most likely next target is a
  184. port to <b>x64</b>, but this will have to wait until the x86 port
  185. stabilizes. Other ports will follow &mdash; companies which are
  186. interested in sponsoring a port to a particular architecture, please
  187. <a href="contact.html">contact me</a>.
  188. </li>
  189. <li>
  190. There are some planned <b>structural improvements</b> to the compiler,
  191. like compressed snapshot maps or generic handling of calls to helper
  192. methods. These are of lesser importance, unless other developments
  193. elevate their priority.
  194. </li>
  195. <li>
  196. <b>Documentation</b> about the <b>internals</b> of LuaJIT is still sorely
  197. missing. Although the source code is included and is IMHO well
  198. commented, many basic design decisions are in need of an explanation.
  199. The rather un-traditional compiler architecture and the many highly
  200. optimized data structures are a barrier for outside participation in
  201. the development. Alas, as I've repeatedly stated, I'm better at
  202. writing code than papers and I'm not in need of any academical merits.
  203. Someday I will find the time for it. :-)
  204. </li>
  205. <li>
  206. Producing good code for unbiased branches is a key problem for trace
  207. compilers. This is the main cause for "trace explosion".
  208. <b>Hyperblock scheduling</b> promises to solve this nicely at the
  209. price of a major redesign of the compiler. This would also pave the
  210. way for emitting predicated instructions, which is a prerequisite
  211. for efficient <b>vectorization</b>.
  212. </li>
  213. <li>
  214. Currently Lua is missing a standard library for access to <b>structured
  215. binary data</b> and <b>arrays/buffers</b> holding low-level data types.
  216. Allowing calls to arbitrary C functions (<b>FFI</b>) would obviate the
  217. need to write manual bindings. A variety of extension modules is floating
  218. around, with different scope and capabilities. Alas, none of them has been
  219. designed with a JIT compiler in mind.
  220. </li>
  221. </ul>
  222. <br class="flush">
  223. </div>
  224. <div id="foot">
  225. <hr class="hide">
  226. Copyright &copy; 2005-2009 Mike Pall
  227. <span class="noprint">
  228. &middot;
  229. <a href="contact.html">Contact</a>
  230. </span>
  231. </div>
  232. </body>
  233. </html>