← Contents

Appendix B

Flags and Environment Variables

Everything that changes what the compiler does from the outside. This is a reference for the internals; the user-facing command line is documented in docs/guide/CLI.md.

Command-line flags that select a mode

FlagEffect
(none)lex, parse, interpret
-e 'code'interpret the argument
--bundleembed the source bytes in a standalone binary
--aotparse at build time, emit C++ that rebuilds the AST
--exetranspile to C++ and compile natively
--cpp, --emit-cppprint the generated C++ instead of compiling it
-O, -O2, -O3, -Os, -O0run the codegen optimizer; the level is forwarded to the C++ compiler

Inspection and tooling flags

FlagEffect
--ast, --dump-astprint the parsed tree as an indented outline
--ast-roundtripserialise and deserialise the tree, then run it — the cache format's own test
--lintstatic analysis; does not run the program
--highlightsyntax-highlight the source
--html, --ansi, --terminalpick the highlighter's renderer
--docrun DOC phasers and print rendered Pod
--profile[=dest]the routine-level wall-time profiler
--ffi-infowhich FFI backend is live, or why none is
--precomp-infowhat the parse cache holds
--precomp-cleanempty it
--precomp-modules=on|off, --precomp-files=on|offthe two cache switches
--version, --help, --quietas expected

Flags are position-independent, and the perl-compatible one-liner family (-n, -p, -a, -F, -i, -0777, -M) is documented in the CLI guide.

Environment variables

Search and loading

VariableEffect
RAKULIBextra module search paths; both , and : separate
ROASTadds the specification suite's test-helper library
RAKUPP_HOMEwhere the binary considers itself installed
RAKUPP_CONFIGoverride the settings file location
XDG_CONFIG_HOME, XDG_CACHE_HOMEthe settings and cache directories

The parse cache

VariableEffect
RAKUPP_PRECOMP_MODULESoverride the module-cache switch for one run
RAKUPP_PRECOMP_FILESoverride the file-cache switch
RAKUPP_NO_PRECOMP=1force both off
RAKUPP_PRECOMP_DIRwhere cache entries live

The foreign-function interface

VariableEffect
RAKUPP_FFI=0force the no-libffi fallback path — the second CI leg
RAKUPP_FFI=/pathuse only that library; if it fails to load, report and fall back rather than silently substituting the system copy
RAKUPP_FFI_TRACE=1log every crossing, with marshalled arguments and raw returns

Concurrency

VariableEffect
RAKUPP_PARALLEL=1true parallelism: workers run interpreter compute concurrently instead of serialising on the GIL
RAKUPP_GILcontrol the lock explicitly
RAKUPP_FREEZE_TRACE=1report any symbol-table mutation after concurrency engaged, and which thread did it

The regex engine

VariableEffect
RAKUPP_LTM=1use the NFA ranker for longest-token matching where it is gap-free
RAKUPP_LTM_DEBUG=1rank both ways and print every disagreement — works without RAKUPP_LTM
RAKUPP_LTM_RANKDUMP=1print each decided alternation's ranking

Diagnostics

VariableEffect
RAKUPP_TRACE=1the module search path and every resolution
RAKUPP_DUMPTOKENS=1the token stream
RAKUPP_ACTTRACE=1grammar action firing
RAKUPP_TAP_TRACE=1the test harness's own emission
RAKUPP_KEEPGEN=1keep the generated C++ from a compiling mode
RAKUPP_DEBUG_MAKE, RAKUPP_DEBUG_REPLAYgrammar make and replay diagnostics

The interactive session

VariableEffect
RAKUPP_REPL=1force a session even when standard input is not a terminal
RAKUPP_HISTORYthe history file

Test-harness variables

RAKU_TEST_DIE_ON_FAIL stops a suite after a real failure; RAKU_EXCEPTIONS_HANDLER=JSON serialises uncaught exceptions as JSON. Both follow Rakudo's spelling because test harnesses set them.

Build-time switches

DefineEffect
RAKUPP_PTR_CENSUScount which combinations of Value's eleven pointers are actually live together — the empirical input to shrinking the struct
_GLIBCXX_USE_CXX11_ABIrelevant only because it is the ABI break copy-on-write strings caused (Chapter 8)

The pointer census is a good example of the project's habit: before collapsing Value's pointers into tag-dispatched slots, a special build counts which sets are live simultaneously, rather than reasoning about what the type tags suggest.

A note on flags that change behaviour

Two of the variables above change results rather than speed: RAKUPP_LTM and RAKUPP_PARALLEL. Both are off by default, and the policy for both is the same: the old path stays available for at least one release after the default changes, so a regression can be bisected to the switch rather than to the release.

Everything else here either reports something or selects a code path that is required to produce identical output.