mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			422 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			422 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| =pod
 | |
| 
 | |
| LuaJIT
 | |
| 
 | |
| =head1 Running LuaJIT
 | |
| 
 | |
| =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
 | |
| 
 | |
| LuaJIT has only a single stand-alone executable, called C<luajit> on
 | |
| POSIX systems or C<luajit.exe> on Windows. It can be used to run simple
 | |
| Lua statements or whole Lua applications from the command line. It has
 | |
| an interactive mode, too.
 | |
| 
 | |
| =head2 Command Line Options
 | |
| 
 | |
| The C<luajit> stand-alone executable is just a slightly modified
 | |
| version of the regular C<lua> stand-alone executable. It supports the
 | |
| same basic options, too. C<luajit -h> prints a short list of the
 | |
| available options. Please have a look at the E<rchevron> Lua manual for
 | |
| details.
 | |
| 
 | |
| LuaJIT has some additional options:
 | |
| 
 | |
| =head2 C<-b[options] input output>
 | |
| 
 | |
| This option saves or lists bytecode. The following additional options
 | |
| are accepted:
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item * C<-l> E<mdash> Only list bytecode.
 | |
| 
 | |
| =item * C<-s> E<mdash> Strip debug info (this is the default).
 | |
| 
 | |
| =item * C<-g> E<mdash> Keep debug info.
 | |
| 
 | |
| =item * C<-n name> E<mdash> Set module name (default: auto-detect from
 | |
| input name)
 | |
| 
 | |
| =item * C<-t type> E<mdash> Set output file type (default: auto-detect
 | |
| from output name).
 | |
| 
 | |
| =item * C<-a arch> E<mdash> Override architecture for object files
 | |
| (default: native).
 | |
| 
 | |
| =item * C<-o os> E<mdash> Override OS for object files (default:
 | |
| native).
 | |
| 
 | |
| =item * C<-e chunk> E<mdash> Use chunk string as input.
 | |
| 
 | |
| =item * C<-> (a single minus sign) E<mdash> Use stdin as input and/or
 | |
| stdout as output.
 | |
| 
 | |
| =back
 | |
| 
 | |
| The output file type is auto-detected from the extension of the output
 | |
| file name:
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item * C<c> E<mdash> C source file, exported bytecode data.
 | |
| 
 | |
| =item * C<h> E<mdash> C header file, static bytecode data.
 | |
| 
 | |
| =item * C<obj> or C<o> E<mdash> Object file, exported bytecode data
 | |
| (OS- and architecture-specific).
 | |
| 
 | |
| =item * C<raw> or any other extension E<mdash> Raw bytecode file
 | |
| (portable).
 | |
| 
 | |
| =back
 | |
| 
 | |
| Notes:
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item * See also string.dump() for information on bytecode portability
 | |
| and compatibility.
 | |
| 
 | |
| =item * A file in raw bytecode format is auto-detected and can be
 | |
| loaded like any Lua source file. E.g. directly from the command line or
 | |
| with C<loadfile()>, C<dofile()> etc.
 | |
| 
 | |
| =item * To statically embed the bytecode of a module in your
 | |
| application, generate an object file and just link it with your
 | |
| application.
 | |
| 
 | |
| =item * On most ELF-based systems (e.g. Linux) you need to explicitly
 | |
| export the global symbols when linking your application, e.g. with:
 | |
| C<-Wl,-E>
 | |
| 
 | |
| =item * C<require()> tries to load embedded bytecode data from exported
 | |
| symbols (in C<*.exe> or C<lua51.dll> on Windows) and from shared
 | |
| libraries in C<package.cpath>.
 | |
| 
 | |
| =back
 | |
| 
 | |
| Typical usage examples:
 | |
| 
 | |
|  luajit -b test.lua test.out                 # Save bytecode to test.out
 | |
|  luajit -bg test.lua test.out                # Keep debug info
 | |
|  luajit -be "print('hello world')" test.out  # Save cmdline script
 | |
|  
 | |
|  luajit -bl test.lua                         # List to stdout
 | |
|  luajit -bl test.lua test.txt                # List to test.txt
 | |
|  luajit -ble "print('hello world')"          # List cmdline script
 | |
|  
 | |
|  luajit -b test.lua test.obj                 # Generate object file
 | |
|  # Link test.obj with your application and load it with require("test")
 | |
| 
 | |
| =head2 C<-j cmd[=arg[,arg...]]>
 | |
| 
 | |
| This option performs a LuaJIT control command or activates one of the
 | |
| loadable extension modules. The command is first looked up in the
 | |
| C<jit.*> library. If no matching function is found, a module named
 | |
| C<jit.E<lt>cmdE<gt>> is loaded and the C<start()> function of the
 | |
| module is called with the specified arguments (if any). The space
 | |
| between C<-j> and C<cmd> is optional.
 | |
| 
 | |
| Here are the available LuaJIT control commands:
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item * C<-jon> E<mdash> Turns the JIT compiler on (default).
 | |
| 
 | |
| =item * C<-joff> E<mdash> Turns the JIT compiler off (only use the
 | |
| interpreter).
 | |
| 
 | |
| =item * C<-jflush> E<mdash> Flushes the whole cache of compiled code.
 | |
| 
 | |
| =item * C<-jv> E<mdash> Shows verbose information about the progress of
 | |
| the JIT compiler.
 | |
| 
 | |
| =item * C<-jdump> E<mdash> Dumps the code and structures used in
 | |
| various compiler stages.
 | |
| 
 | |
| =item * C<-jp> E<mdash> Start the integrated profiler.
 | |
| 
 | |
| =back
 | |
| 
 | |
| The C<-jv> and C<-jdump> commands are extension modules written in Lua.
 | |
| They are mainly used for debugging the JIT compiler itself. For a
 | |
| description of their options and output format, please read the comment
 | |
| block at the start of their source. They can be found in the C<lib>
 | |
| directory of the source distribution or installed under the C<jit>
 | |
| directory. By default this is C</usr/local/share/luajit-2.0.5/jit> on
 | |
| POSIX systems.
 | |
| 
 | |
| =head2 C<-O[level]>
 | |
| 
 | |
| C<-O[+]flag> C<-O-flag>
 | |
| 
 | |
| C<-Oparam=value>
 | |
| 
 | |
| This options allows fine-tuned control of the optimizations used by the
 | |
| JIT compiler. This is mainly intended for debugging LuaJIT itself.
 | |
| Please note that the JIT compiler is extremely fast (we are talking
 | |
| about the microsecond to millisecond range). Disabling optimizations
 | |
| doesn't have any visible impact on its overhead, but usually generates
 | |
| code that runs slower.
 | |
| 
 | |
| The first form sets an optimization level E<mdash> this enables a
 | |
| specific mix of optimization flags. C<-O0> turns off all optimizations
 | |
| and higher numbers enable more optimizations. Omitting the level (i.e.
 | |
| just C<-O>) sets the default optimization level, which is C<-O3> in the
 | |
| current version.
 | |
| 
 | |
| The second form adds or removes individual optimization flags. The
 | |
| third form sets a parameter for the VM or the JIT compiler to a
 | |
| specific value.
 | |
| 
 | |
| You can either use this option multiple times (like C<-Ocse -O-dce
 | |
| -Ohotloop=10>) or separate several settings with a comma (like
 | |
| C<-O+cse,-dce,hotloop=10>). The settings are applied from left to right
 | |
| and later settings override earlier ones. You can freely mix the three
 | |
| forms, but note that setting an optimization level overrides all
 | |
| earlier flags.
 | |
| 
 | |
| Here are the available flags and at what optimization levels they are
 | |
| enabled:
 | |
| 
 | |
| Flag
 | |
| 
 | |
| -O1
 | |
| 
 | |
| -O2
 | |
| 
 | |
| -O3
 | |
| 
 | |
| fold
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Constant Folding, Simplifications and Reassociation
 | |
| 
 | |
| cse
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Common-Subexpression Elimination
 | |
| 
 | |
| dce
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Dead-Code Elimination
 | |
| 
 | |
| narrow
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Narrowing of numbers to integers
 | |
| 
 | |
| loop
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Loop Optimizations (code hoisting)
 | |
| 
 | |
| fwd
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Load Forwarding (L2L) and Store Forwarding (S2L)
 | |
| 
 | |
| dse
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Dead-Store Elimination
 | |
| 
 | |
| abc
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Array Bounds Check Elimination
 | |
| 
 | |
| sink
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Allocation/Store Sinking
 | |
| 
 | |
| fuse
 | |
| 
 | |
| E<bull>
 | |
| 
 | |
| Fusion of operands into instructions
 | |
| 
 | |
| Here are the parameters and their default settings:
 | |
| 
 | |
| Parameter
 | |
| 
 | |
| Default
 | |
| 
 | |
| maxtrace
 | |
| 
 | |
| 1000
 | |
| 
 | |
| Max. number of traces in the cache
 | |
| 
 | |
| maxrecord
 | |
| 
 | |
| 4000
 | |
| 
 | |
| Max. number of recorded IR instructions
 | |
| 
 | |
| maxirconst
 | |
| 
 | |
| 500
 | |
| 
 | |
| Max. number of IR constants of a trace
 | |
| 
 | |
| maxside
 | |
| 
 | |
| 100
 | |
| 
 | |
| Max. number of side traces of a root trace
 | |
| 
 | |
| maxsnap
 | |
| 
 | |
| 500
 | |
| 
 | |
| Max. number of snapshots for a trace
 | |
| 
 | |
| hotloop
 | |
| 
 | |
| 56
 | |
| 
 | |
| Number of iterations to detect a hot loop or hot call
 | |
| 
 | |
| hotexit
 | |
| 
 | |
| 10
 | |
| 
 | |
| Number of taken exits to start a side trace
 | |
| 
 | |
| tryside
 | |
| 
 | |
| 4
 | |
| 
 | |
| Number of attempts to compile a side trace
 | |
| 
 | |
| instunroll
 | |
| 
 | |
| 4
 | |
| 
 | |
| Max. unroll factor for instable loops
 | |
| 
 | |
| loopunroll
 | |
| 
 | |
| 15
 | |
| 
 | |
| Max. unroll factor for loop ops in side traces
 | |
| 
 | |
| callunroll
 | |
| 
 | |
| 3
 | |
| 
 | |
| Max. unroll factor for pseudo-recursive calls
 | |
| 
 | |
| recunroll
 | |
| 
 | |
| 2
 | |
| 
 | |
| Min. unroll factor for true recursion
 | |
| 
 | |
| sizemcode
 | |
| 
 | |
| 32
 | |
| 
 | |
| Size of each machine code area in KBytes (Windows: 64K)
 | |
| 
 | |
| maxmcode
 | |
| 
 | |
| 512
 | |
| 
 | |
| Max. total size of all machine code areas in KBytes
 | |
| 
 | |
| ----
 | |
| 
 | |
| Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
 | |
| 
 | |
| =cut
 | |
| 
 | |
| #Pod::HTML2Pod conversion notes:
 | |
| #From file running.html
 | |
| # 13720 bytes of input
 | |
| #Mon May 14 13:19:16 2018 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='...'>
 |