|
|
|
=pod
|
|
|
|
|
|
|
|
LuaJIT
|
|
|
|
|
|
|
|
=head1 Frequently Asked Questions (FAQ)
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item * LuaJIT
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item * Download E<rchevron>
|
|
|
|
|
|
|
|
=item * Installation
|
|
|
|
|
|
|
|
=item * Running
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item * Extensions
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item * FFI Library
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item * FFI Tutorial
|
|
|
|
|
|
|
|
=item * ffi.* API
|
|
|
|
|
|
|
|
=item * FFI Semantics
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item * jit.* Library
|
|
|
|
|
|
|
|
=item * Lua/C API
|
|
|
|
|
|
|
|
=item * Profiler
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item * Status
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item * Changes
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=item * FAQ
|
|
|
|
|
|
|
|
=item * Performance E<rchevron>
|
|
|
|
|
|
|
|
=item * Wiki E<rchevron>
|
|
|
|
|
|
|
|
=item * Mailing List E<rchevron>
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item Q: Where can I learn more about LuaJIT and Lua?
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item * The E<rchevron> LuaJIT mailing list focuses on topics related
|
|
|
|
to LuaJIT.
|
|
|
|
|
|
|
|
=item * The E<rchevron> LuaJIT wiki gathers community resources about
|
|
|
|
LuaJIT.
|
|
|
|
|
|
|
|
=item * News about Lua itself can be found at the E<rchevron> Lua
|
|
|
|
mailing list. The mailing list archives are worth checking out for
|
|
|
|
older postings about LuaJIT.
|
|
|
|
|
|
|
|
=item * The E<rchevron> main Lua.org site has complete E<rchevron>
|
|
|
|
documentation of the language and links to books and papers about Lua.
|
|
|
|
|
|
|
|
=item * The community-managed E<rchevron> Lua Wiki has information
|
|
|
|
about diverse topics.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item Q: Where can I learn more about the compiler technology used by
|
|
|
|
LuaJIT?
|
|
|
|
|
|
|
|
I'm planning to write more documentation about the internals of LuaJIT.
|
|
|
|
In the meantime, please use the following Google Scholar searches to
|
|
|
|
find relevant papers:
|
|
|
|
|
|
|
|
Search for: E<rchevron> Trace Compiler
|
|
|
|
|
|
|
|
Search for: E<rchevron> JIT Compiler
|
|
|
|
|
|
|
|
Search for: E<rchevron> Dynamic Language Optimizations
|
|
|
|
|
|
|
|
Search for: E<rchevron> SSA Form
|
|
|
|
|
|
|
|
Search for: E<rchevron> Linear Scan Register Allocation
|
|
|
|
|
|
|
|
Here is a list of the E<rchevron> innovative features in LuaJIT.
|
|
|
|
|
|
|
|
And, you know, reading the source is of course the only way to
|
|
|
|
enlightenment. :-)
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item Q: Why do I get this error: "attempt to index global 'arg' (a nil
|
|
|
|
value)"?
|
|
|
|
|
|
|
|
Q: My vararg functions fail after switching to LuaJIT!
|
|
|
|
|
|
|
|
LuaJIT is compatible to the Lua 5.1 language standard. It doesn't
|
|
|
|
support the implicit C<arg> parameter for old-style vararg functions
|
|
|
|
from Lua 5.0.
|
|
|
|
|
|
|
|
Please convert your code to the E<rchevron> Lua 5.1 vararg syntax.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item Q: Why do I get this error: "bad FPU precision"?
|
|
|
|
|
|
|
|
=item Q: I get weird behavior after initializing Direct3D.
|
|
|
|
|
|
|
|
=item Q: Some FPU operations crash after I load a Delphi DLL.
|
|
|
|
|
|
|
|
DirectX/Direct3D (up to version 9) sets the x87 FPU to single-precision
|
|
|
|
mode by default. This violates the Windows ABI and interferes with the
|
|
|
|
operation of many programs E<mdash> LuaJIT is affected, too. Please
|
|
|
|
make sure you always use the C<D3DCREATE_FPU_PRESERVE> flag when
|
|
|
|
initializing Direct3D.
|
|
|
|
|
|
|
|
Direct3D version 10 or higher do not show this behavior anymore.
|
|
|
|
Consider testing your application with older versions, too.
|
|
|
|
|
|
|
|
Similarly, the Borland/Delphi runtime modifies the FPU control word and
|
|
|
|
enables FP exceptions. Of course this violates the Windows ABI, too.
|
|
|
|
Please check the Delphi docs for the Set8087CW method.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item Q: Sometimes Ctrl-C fails to stop my Lua program. Why?
|
|
|
|
|
|
|
|
The interrupt signal handler sets a Lua debug hook. But this is
|
|
|
|
currently ignored by compiled code (this will eventually be fixed). If
|
|
|
|
your program is running in a tight loop and never falls back to the
|
|
|
|
interpreter, the debug hook never runs and can't throw the
|
|
|
|
"interrupted!" error.
|
|
|
|
|
|
|
|
In the meantime you have to press Ctrl-C twice to get stop your
|
|
|
|
program. That's similar to when it's stuck running inside a C function
|
|
|
|
under the Lua interpreter.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item Q: Why doesn't my favorite power-patch for Lua apply against
|
|
|
|
LuaJIT?
|
|
|
|
|
|
|
|
Because it's a completely redesigned VM and has very little code in
|
|
|
|
common with Lua anymore. Also, if the patch introduces changes to the
|
|
|
|
Lua semantics, these would need to be reflected everywhere in the VM,
|
|
|
|
from the interpreter up to all stages of the compiler.
|
|
|
|
|
|
|
|
Please use only standard Lua language constructs. For many common needs
|
|
|
|
you can use source transformations or use wrapper or proxy functions.
|
|
|
|
The compiler will happily optimize away such indirections.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item Q: Lua runs everywhere. Why doesn't LuaJIT support my CPU?
|
|
|
|
|
|
|
|
Because it's a compiler E<mdash> it needs to generate native machine
|
|
|
|
code. This means the code generator must be ported to each
|
|
|
|
architecture. And the fast interpreter is written in assembler and must
|
|
|
|
be ported, too. This is quite an undertaking.
|
|
|
|
|
|
|
|
The install documentation shows the supported architectures. Other
|
|
|
|
architectures will follow based on sufficient user demand and/or
|
|
|
|
sponsoring.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=over
|
|
|
|
|
|
|
|
=item Q: When will feature X be added? When will the next version be
|
|
|
|
released?
|
|
|
|
|
|
|
|
When it's ready.
|
|
|
|
|
|
|
|
C'mon, it's open source E<mdash> I'm doing it on my own time and you're
|
|
|
|
getting it for free. You can either contribute a patch or sponsor the
|
|
|
|
development of certain features, if they are important to you.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
----
|
|
|
|
|
|
|
|
Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
|
|
|
|
|
|
|
|
=cut
|
|
|
|
|
|
|
|
#Pod::HTML2Pod conversion notes:
|
|
|
|
#From file faq.html
|
|
|
|
# 7685 bytes of input
|
|
|
|
#Sat May 13 16:35:32 2017 agentzh
|
|
|
|
# No a_name switch not specified, so will not try to render <a name='...'>
|
|
|
|
# No a_href switch not specified, so will not try to render <a href='...'>
|