=begin pod :tag<index>

=TITLE Pragmas

=SUBTITLE Special modules for special use

In Perl 6, B<pragmas> are core modules used to either identify a
specific version of Perl 6 to be used or to modify its normal behavior
in some way.  They are "use"ed in your code just as normal modules:

=begin code
use v6.c;
=end code

Following is a list of pragmas with a short description of each
pragma's purpose or a link to more details about its use.  (Note:
Pragmas marked "[NYI]" are not yet implemented, and those marked "[TBD]"
are to be defined later.)

=comment The following should be a table but formatting in tables is
not yet rendered properly.

=item X<B<MONKEY-BARS>|MONKEY-BARS> [NYI]

=item X<B<MONKEY-BRAINS>|MONKEY-BRAINS> [NYI]

=item X<B<MONKEY-BUSINESS>|MONKEY-BUSINESS> [NYI]

=item X<B<MONKEY-GUTS>|MONKEY-GUTS>

This pragma is not currently part of any Perl 6 specification, but is present
in Rakudo as a synonym to C<use nqp> (see below).

=item X<B<MONKEY-SEE-NO-EVAL>|MONKEY-SEE-NO-EVAL> L<EVAL|/routine/EVAL>

=item X<B<MONKEY-SHINE>|MONKEY-SHINE> [NYI]

=item X<B<MONKEY-TRAP>|MONKEY-TRAP> [NYI]

=item X<B<MONKEY-TYPING>|MONKEY-TYPING> L<augment|/syntax/augment>

=item X<B<MONKEY-WRENCH>|MONKEY-WRENCH> [NYI]

=item X<B<experimental>|experimental> allows use of experimental features

=item X<B<fatal>|fatal> alters behaviour of L<fail|/language/control#fail>

=item X<B<internals>|internals> [NYI]

=item X<B<invocant>|invocant> [NYI]

=item X<B<lib>|lib> L<Finding Modules|/language/modules#Finding_Modules>

=item X<B<newline>|newline> [TBD]

=item X<B<nqp>|nqp>

Use at your own risk.

This is a Rakudo-specific pragma. With it, Rakudo provides access to the
L<nqp opcodes|https://github.com/perl6/nqp/blob/master/docs/ops.markdown>
in a top level namespace:

    use nqp;
    nqp::say("hello world");

This uses the underlying nqp C<say> opcode instead of the Perl 6 routine. This
pragma may make your code rely on a particular version of nqp, and since
that code is not part of the Perl 6 specification, it's not guaranteed to
be stable. You may find a large number of usages in the Rakudo core,
which are used to make the core functionality as fast as possible.
Future optimizations in the code generation of Rakudo may obsolete these
usages.

=item X<B<parameters>|parameters> [NYI]

=item X<B<precompilation>|precompilation> [TBD]

=item X<B<soft>|soft> L<Re-dispatching|/language/functions#Re-dispatching>, L<inlining|/language/functions#index-entry-use_soft_(pragma)>

=item X<B<strict>|strict> [TBD]

=item X<B<trace>|trace> [TBD]

=item X<B<v6>|v6> L<Writing Tests|/language/testing#Writing_tests>

=item X<B<variables>|variables>
 L<Defined Variables Pragma|/language/variables#Default_Defined_Variables_Pragma>

=item X<B<worries>|worries> [TBD]

=end pod
