<commit_before>=encoding utf8

=head1 TITLE

Synopsis 99: Glossary

=head1 VERSION

    Created: 26 June 2013

    Last Modified: 18 Aug 2014
    Version: 7

This document tries to define many of the terms used within the Perl 6
community.  It does not have an Apocalypse or Exegesis predecessor.  It
is intended as both a quick introduction to terms used on the #perl6
channel (on freenode), as well as a more permanent, and deeper source of
explanations in the context of Perl 6.

If you, as a reader, miss a term in a glossary, just add the term with the
explanation.  Or if you are not sure what the missing term means, just add a
header for the term.  Without doubt, someone else more knowledgable will add
the explanation later for you and everybody else.

=head1 A

=head2 ack

An improved version of L</grep>, written in Perl (L<http://beyondgrep.com>).

Also used by old folks to indicated acknowledgement.

=head2 actions

A class used to generate an L</AST> from the results of parsing text with a
L</grammar>. The method to attach a generated AST is called "make", the one
to retrieve an AST is called "made".

=head2 adverb

See L<adverbial pair>.

=head2 adverbial pair

A generalized form of L</pair notation>.  They all start with the colon, like:

  adverbial pair  | pair notation
  ================|==============
  :foo<bar>       | foo => 'bar'
  :foo(bar)       | foo => bar
  :$foo           | foo => $foo
  :foo            | foo => True
  :!foo           | foo => False

=head2 AFAICS

As Far As I Can See.

=head2 AFAICT

As Far As I Can Tell.

=head2 AFAIK

As Far As I Know.

=head2 afk

Away From Keyboard.  Logged in, but there's noone looking at the screen.

=head2 ALAP

As Late As Possible

=head2 Any

The class from which most things derive, except for L</Junction>s.
Any is derived from L</Mu>.

=head2 any()

A Junction with "or" semantics.

=head2 API

Application Programming Interface. Ideally, someone using your system or
library should be able to do so with knowledge only of the API, but not
necessarily knowing anything about the internals or implementation.

=head2 Apocalypse

A document originally written by L</TimToady>, in which he processed the
initial barrage of RFC's that came out of the Perl community.  Now only kept
as an historical document for reference.  See also L</Exegesis> and
L</Synopsis>.

=head2 arity

Number of L</operands> expected by an L</operator>.

=head2 argument

=head2 array

=head2 AST

Acronym for L<B<A>bstract B<S>yntax B<T>ree|http://en.wikipedia.org/wiki/Abstract_syntax_tree>.
Used in many places, including L</actions>, L</PAST>, and L</QAST>.

=head2 atomic

See L</CAS>.

=head2 attribute

Per-object storage slot. Other languages call it "Field", "Member", "Slot" or
"Property".

=head2 auth

Way of deliberately ambiguously expressing L</author> or L</authority>.

=head2 author

=head2 authority

=head2 autopun

"Are you ignorant or apathetic?" - "I don't know, and I don't care."

=head1 B

=head2 backlog

That part of a discussion on an L</IRC> channel that you've missed.  If it is
not or no longer available in your IRC client, you can go to sites such as
L<http://irc.perl6.org> to see what has been logged for you.

=head2 backtrack

Feature of a combinatorial algorithm which goes back one step toward the trunk
after failing exploring a branch of the potential solution space.
A string match is such a algorithm. Here, backtracking usually meains moving
back the L</cursor>. In a non greedy match, it means moving the cursor forward.

=head2 backend

Denote a VM targetted by L</Rakudo>. Can be L</MoarVM>, L</JVM> or L</Parrot>.

=head2 Bailador

Spanish for "dancer", The Bailador module (L<https://github.com/tadzik/Bailador/>)
is a port of Perl 5's Dancer web framework (L<http://perldancer.org/>).

=head2 bare string

An non quoted alphanumeric string. In Perl 6, only allowd at the left of a L</fat comma>.

=head2 biab

Back In A Bit.  Only L</afk> for a little while.

=head2 binary

An operator is binary or of L</arity> two if its L</category> is L</infix> or L</postcircumfix>.

=head2 blast

"B<Bl>ock, B<A>lternatively B<St>atement". Several constructs in Perl 6 expect
either a single L</statement>, or a L</block>. Thus, a blast:

    try { dangerous(); functions() };
    #   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  Block
    try dangerous-function();
    #   ^^^^^^^^^^^^^^^^^^^^          Statement

Particularly cute, because L</phaser>s expect blasts.

=head2 block

A source code section delimited by braces.
Used for L</control flow> and as L</scope>.

=head2 Bool

L</Boolean> type.

=head2 boolean

L</Value> of type L</Bool>. Apart the class itself, can be either C<True> or C<False>.

=head2 boolean context

A L</context> that forces an L<expression|/Expression> to give a L</boolean> value.
The L</prefix> L</operator>s C<so>, C<not> and their
repective higher L</precedence> C<?> and C<!> forms force a boolean context with C<!> and C<not> doing
a negation. 
The L</predicate> part of a L</control flow> L</statement> forces a boolean context.
A class can define a C<Bool> method to handle the boolean context.
For L<natives|/"Native value">, within L</MoarVM>, it is handled by C</MVMBoolificationSpec> member
of the L</stable> structure.

=head2 bootstrap

Starting up a system that uses itself to define, build or compile itself, is a practical exercise on solving the chicken and egg problem.
This phase is called bootstrap. L<Documentation|https://github.com/MoarVM/MoarVM/blob/master/docs/bootstrap.markdown>
about booststrapping the L</6model> of L<MoarVM>

=head2 boxing

Operation transforming a L<native value|/"Native value"> into an object.
The reverse operation is unboxing.
The relation between boxed/native should not be confused
with L</container>/containee.

=head2 branch

=head2 brb

Be Right Back.  Only L</afk> for a little while.

=head2 BS

Bounded Serialization.

=head2 Bug report

The way to report problems to the implementors.
For the interpretors themselves, use L</RT>.
It is good practice to include the interpreter L</version> in a bug report.
A short piece of example code that demonstrates the bug without requiring any
further set-up is usually very well received, too - see also L</golfing>
For the user packages hosted on L</github>, you can report issues.

=head2 bytecode

=head1 C

=head2 caller

The piece of code (or its lexical environment) that called a given piece of
code. Generally only known at run time.

=head2 CALLER::

A L</pseudo-scope> to access L</symbol>s in the L</caller>'s L</scope>.

=head2 Camelia

The butterfly-like logo of Perl 6 as can be observed at L<http://perl6.org>.

=head2 camelia

The IRC-bot on #perl6 that will evaluate code for you in various version of
Perl 5, Perl 6 and NQP.

=head2 capture

A regex can record substrings of the L</match>ed string that are matched capturing parts of the regex. That
part (and the matched text) is a capture.

For example

    if '..42' ~~ / \.+ (\d+) / {
        #              ^^^^^ capture
        say $0;
        #   ^^ capture variable
    }
    
C<(I<...>)> is the capture syntax while its non capturing counterpard is the grouping syntax : C<[I<...>]>.

=head2 CAS

An atomic Compare And Swap.  Primitive for lock-free multi-threaded read/write
access.

=head2 category

In L</grammar>s, regex of a L</multi> form a category that are distinguished
by their L</long name>. That includes the L<signature> but also the value
of the L<:sym> adverb. An L<expression|/Expression> is constituted of tokens that belongs
either in the category L</term> or one of the L</operator>s categories.

A regex definition for one of the term kinds :

    token term:sym<name> { ... }

=head2 CFG

1) Context Free Grammar.
2) see L</Control Flow Graph>.

=head2 circularity saw

A pun on "circular saw".  When bootstrapping a language in terms
of itself, we must rely on circular definitions in various places.
Obviously if we were really to use those circular definitions to
implement our language, we'll just get stuck in an infinite regress.
So instead we grab our trusty "circularity saw" to cut those circular
definitions in a spot deep down, hopefully in a way that the resulting
splice will be very difficult for the end-user to notice in day-to-day use.

=head2 circumfix

If a syntactic construct, for example a pair of parenthesis, surrounds another
piece of syntax, the surrounding first part is called a circumfix.

    say (2 + 3);
      # ^^^^^^^ circumfix
    say <a b c>;
      # ^^^^^^^ circumfix

=head2 class

A basic software structure in L</OOP>.
See the L<Wikipedia entry|http://en.wikipedia.org/wiki/Class_%28computer_programming%29>.

=head2 CLI

Command Line Interface, what you see in a Terminal (window).

=head2 clog

To L</backlog>.

Etymology: There is a website C<irclog.perlgeek.de> providing either IRC logs
or IR clogs, depending on how you interpret the domain name.

=head2 CLR

Common Language Runtime, as used by Niecza/mono/.NET.

=head2 comment

Parts of a program intend for user consumption that are not used to generate code.
Beside the C<#> that starts a comment that ends with the current line
Perl 6 supports many syntactic forms for different kinds of comments.
Like inline comments that can be used as L</whitespace>, or comments
that appear after a name declaration that are included in the L</pod>
documentation.

=head2 compilation unit

A L</compilation unit> is a set of files or a string that is compiled at once.
It involves the L</serialization> of code and data.

=head2 compile time

=head2 compiler

In a L</dynamic language> like Perl 6, the compiler is also referred as L</interpreter>.
In simpler dynamic languages like
Perl 5, the interpreter does not go through conceptual phases similar to the one for a compiler
of non dynamic language, the term compiler is rarely used.

When transforming L</concrete syntax> to L</bytecode>, the first conceptual phase is called L<parsing|/parse>
and generate a L</parse tree>. Next the parse tree is transformed into an abstract syntax tree which is a form
that can be optimised. Next the abstract tree is transformed to L</bytecode> in an L</compilation unit>.
Then, this bytecode is executed. Depending on the type of the data manipulated by the L</program>
bytecode can be transformed in optimised bytecode or into L</machine code>.
This last two operations are forms of L</JIT>.

=head2 COMPILING::

A L</pseudo-scope> to access lexical L</symbol>s in the L</scope> being compiled.

=head2 composer

A composer is a syntax for defining L</values>. When values are L</object>s, their composer is a L</Huffmanization>
of a L</constructor> L<expression|/Expression>. For an example, see the L</Fat comma>.

=head2 compunit

See L</compilation unit>.

=head2 concurrency

=head2 concrete

An L</object> L</value> is concrete when it is not the L</class> itself

=head2 concrete syntax

=head2 container

=head2 context

A context specifies the kind of value expected from an L<expression|/Expression>.
A context may be L<boolean context|/boolean>, L<numeric context|/numeric>, L<item context|/item>,
L<list context|/list> L<hash context|/hash>. 
Some L</prefix> L</operator>s are used to force the context;  

=head2 control flow

Without control flow statements, a program execution would be purely sequential.
Control flow statement generally uses a predicate and branches to one of its
subtatement according to the predicate value.

=head2 Control Flow Graph

in L</spesh>, a L</dominance> graph generated from L</bytecode> analysis so that L</Single Static Assignment>
can be done.

=head2 constant

A L</variable> that has a unchangeable L</value>.

=head2 constructor

The OO way to I<construct> object. L<Composer>s are constructor L</Huffmanization>s that are available for
the most common types like L</pairs>s

=head2 CORE::

A L</pseudo-scope> to access L</symbol>s of the outermost lexical L</scope>, definition of standard Perl.

=head2 CPAN

Comprehensive Perl Archive Network.  Content delivery system for Perl
distributions.

=head2 credentials

=head2 CUR

Short for C<CompUnitRepo>, the type of objects that inhabit C<@*INC>.

=head2 CURL

Short for C<CompUnitRepo::Local>, the type of C<CompUnitRepo> objects that
refer to the local file system.

=head1 D

=head2 dalek

An L</IRC> bot that reports when various projects have been updated. It gives
L</karma> to those who pushed the changes to the project.

=head2 DarkPAN

Perl code in production use at companies that has never been uploaded to CPAN.
As in "how will this change affect the DarkPAN", which can't be answered
because you generally don't have access to that code.

=head2 dead code

Code that is never called. For example

    sub f() {
        say 42;
        return;
        # everything below this is dead code,
        # because the return; above prevents it from running
        say 23;
    }

=head2 debugger

A piece of software that helps you to track down errors in your software.
It typically allows things like stepping through code, setting breakpoints
and inspecting variables.

=head2 dev

Either a developer (person), or a development version of a program, or a
branch for development in a repository.

=head2 DFS

Depth First Search. See L<also|http://xkcd.com/761/>.

=head2 dies_ok

A C<Test> function that succeeds when its argument, a Code object, dies at run
time. See L<S24|http://perlcabal.org/syn/S24.html>.

=head2 diffy

An L</operator> that produces a resulting L</value> of a L</type> different from its L</argument>s. For
example, all the comparison operators like C<==> and C<lt> are diffy (because
they produce C<Bool>s), the range operators are diffy (because they produce
ranges), but C<+> and C<~> and C<x> are not diffy because they (sorta, kinda)
emit what they accept.

The reason we care about operators being diffy or not is that you can basically
only reduce on non-diffy stuff. So C<[+]> makes sense, but C<[..]> doesn't.
(C<[==]> actually does makes sense even though it's diffy, but that's because
it's also chaining.) You also can't make assignment metaoperators from diffy
operators. So C<+=> makes sense, but C<..=> doesn't.

=head2 DIHWIDT

"Doctor, It Hurts When I Do This."  Well, stop doing it then.

=head2 dispatcher

The piece of code in the runtime that determines which (multi) method or
subroutine to invoke.

=head2 distribution

A collection of 1 or more L</compunit>s for installing locally, or for loading
from a remote location.

=head2 DSL

L</Domain Specific Language>. See L</slang>.

=head2 Domain specific language.

=head2 Dominance

See L</Control Flow Graph>

=head2 DYNAMIC::
    
A L</pseudo-scope> to access contextutal L</symbol>s  in my or any L</caller>'s lexical L</scope>.

=head2 dynamic

=head2 dynamic language

=head2 DWIM

Acronym for "B<D>o B<W>hat B<I> B<M>ean".  A programming language designer motto.

=head1 E

=head2 eager

One of the opposites of L</lazy>.

=head2 ecosystem

The L<ecosystem|https://github.com/perl6/ecosystem> is a repository of Perl 6 modules installable
by L</Panda>. L</Rakudo *> releases include a tested subset of the ecosystem.

=head2 edsel

Something that intends to please everyone by catering for everybody's taste,
yet in the end pleasing nobody, because nobody is catered for enough.

=head2 empty list

A list which contains no value. Noted C<()>.

=head2 EPIC FAIL

An internet expression describing the very dramatic, spectacular or just funny failure of an endeavor.
See the L<relevant Wikipedia entry|https://en.wikipedia.org/wiki/Failure#Internet_memes>.

=head2 EVAL

A Perl 6 command that takes a string as an argument and executes its content as Perl 6 code.

=head2 Exegesis

A document originally written by L</TheDamian>, in which he tried to explain
the L</Apocalypse>s to the common (wo)man.  Now only kept as an historical
document for reference.  See also L</Synopsis>.

=head2 export

See L</import>.

=head2 EXPORT

=head2 Expression

An expression is a part of a statement that is constituted of operators and their operands
and gives a value. The semantic of an expression may depend on its L</context>.
An expression is all or part of a L</statement>.

=head2 Extop

An extension to the default L</bytecode> L</instruction set> in L</Parrot> or L</MoarVM>.
Used to support L</opcode>s specific to a language.

=head1 F

=head2 FAIL

=head2 fat comma

Contrary to Perl 5, C<< => >>, the fat comma does not simply separate two values but makes
a L</Pair> out of them. The left value can be a L</bare string>. This is the only
place where Perl 6 accepts a bare string. Example:
    
      foo => bar

=head2 fiddly

Used of an L</operator> that doesn't participate in forming metaoperators at all.
(Because that would be "too fiddly" to get to work, presumably.) C<?? !!> is
such an operator. The method call operator is another. (And hence C<.=> is
actually a special case, not a "real" metaoperator.) List assignment is also
fiddly. (But item assignment is not.)

No meta in fiddly things. So you can't reduce, negate, reverse, sequence,
cross, zip, hyperify or assignify fiddly operators.

=head2 FIFO

L<First In First Out|https://en.wikipedia.org/wiki/FIFO>, a fairly common data
structure in programming languages.
In Perl 6 an array behaves as such when used as a L</queue>.
See also L</LIFO>.

=head2 flap

Sometimes a test will fail under some conditions, but not others; when
this test passes some test runs and fails others, it's called flapping.

=head2 fork

The creation of another process.

Also, a feature of L</github> that copies a repository from one user to another,
to allow users to make changes to a repository without needing permissions on
the original project. After a user makes changes they will likely submit a
L</pull request>.

=head2 fossil

Something in a generally current document that is no longer true but which has
not yet been fixed by correcting or removing it.

=head2 FSVO

For Some Value Of.

=head2 FTFY

Fixed That For You.

=head2 fudge

Way to temporarily mark tests in the L</spectest> for a specific Perl 6 version
as I<todo> (so that a failure of the test will be marked ok, and a pass will
be marked as an exception), or as I<skip> if they cause a L</compile-time> or
L</runtime> exception.

=head1 G

=head2 GC

Garbage collecting.

=head2 gimme

=head2 gist

A summary, or a method on objects that is invoked by L</say> to print out the
object in a human readable format, or a paste server used by denizens of L</IRC>.

See L<https://gist.github.com> for the last usage.

=head2 git

The distributed source revision system used by many, if not all Perl 6
projects, generally hosted on L</github>. A good L<glossary|https://www.kernel.org/pub/software/scm/git/docs/gitglossary.html> about git.
A good L<reference|http://git-scm.com/book>.

=head2 git submodule

A way to use a git L<repositories|/repository> from one git repository.
L<More information|http://git-scm.com/book/en/Git-Tools-Submodules>/

=head2 github

Online open source repository hoster using L</git>.
The C<ecosystem> is hosted on github.

=head2 given

keyword for the Perl 6 switch L</statement>.

=head2 GLOBAL::

A L</pseudo-scope> for L</interpreter>-wide L</package> L</symbol>s, really UNIT::GLOBAL.

=head2 GLR

The Great List Refactor: a refactoring of the reification of lazy lists, so that
lazy evaluation is only done when it is really needed.  Expected to provide a
performance benefit of several factors in certain, loop-like situations.

=head2 golf

Shortest possible way (least amount of typed characters) to get a program to do
what you want, or to describe a problem or bug.

In the case of bug hunting, the aim is only partly "fewest characters" and
partly "fewest concepts". The aim being to show exactly what concepts are
necessary to trigger the surprising behavior.

=head2 golfing

The process of creating the shortest possible program to prove what you want.
Sometimes also a form of L</obfuscation>.

=head2 good *

Good morning/afternoon/evening.  Since the contributors are in many different
timezones, one contributor's morning is another contributor's evening.

=head2 grammar

A feature of Perl 6 that uses L</regex>es to implement a grammar for parsing
text. Perl 6 implementations use grammars themselves to parse the language. The
results of parsing with a grammar can be further passed on to L</actions>.
A grammar is composed of methods introduced by one of the three keywords
C<rule>, C<L</token>>, C<regex>. There is L</backtrack>ing only in C<regex> and
C<rule> implies L</whitespace>s between subrules.

=head2 green threads

Threads that are scheduled by the virtual machine, not by the operating
system.

=head1 H

=head2 hash

A data type, conveniently available in variables starting with the percent sign
C<%> and provided by types conformant to the C<Associative> role like the C<Hash> type.
Often called associative table in other languages.

=head2 High Level Language

A high level language provides abstractions that decouples it from specific operating systems
and processors. Perl 6 is such a language and provides some interoperability with other HLLs when they are
compiled with the rakudo toolkit.
Some of these abstractions like arrays, associative tables, integers, floats, strings and objects are common
to many languages but specific semantic and underlying type L</representation>s may differ.
Also, a given language may provide many flavors of them.
Perl 6 provides common L</concrete syntax> to access them.
C<MVMHLLConfig> is the L</MoarVM> C level structure that hooks
to the underlying language specific representations.
The L</metamodel> allows to express specific semantics proper to a given L</OO> language.
L</Zavolaj> provides interoperabiity with languages which compilers
follow C language linking conventions.

=head2 HLL

See L</High Level Language>.

=head2 HN

Hacker news as seen on L<https://news.ycombinator.com>.

=head2 HN'ed

Being mentioned on Hacker news (L<https://news.ycombinator.com>).

=head2 HPMoR

<NAME> and the Methods of Rationality. An inexplicably good Harry Potter
fanfic with far more significance than the word "fanfic" might lead you to
believe. See L<http://hpmor.com>.

=head2 Huffmanization

L<Huffman coding|http://en.wikipedia.org/wiki/Huffman_coding> is a compression algorithm that encodes
common symbols with a short code. By analogy, we call huffmanization alternative and shorter syntax
for common syntax constructs. The cost of huffmanization is the cost of learning additional syntax.
In Perl 6, L</composer>s are a form of huffmanization.

=head2 hyper

Process data asynchronously when possible, but return the result data in the
order it would have been if the source data had been processed in a single
thread/process.

=head2 hypothetical variable

=head1 I

=head2 IC

I see.

=head2 iffy

Used of an operator that either returns a C<Bool> result, I<or something like
it> (such as a match object). All the comparison operators are iffy, as are
conditional operators like C<&&>, C<?^>, and C<or>. C<%%> is iffy, but C<%>
isn't. The junctive operators are iffy.

The reason that we care about iffy operators is that you can only append the
C<!> metaoperator to an operator that's iffy.

=head2 IIRC

If I Remember Correctly.

=head2 IIUC

If I Understand Correctly.

=head2 import

L</Module>s interact with each other through named entities called symbols.
The operation that makes symbols from a module avalaible to another
module is called import while the operation of using such a name is called import.

=head2 infix

An operator that can appear between two terms.

=head2 inline

=head2 install

=head2 installer

=head2 Int

A built-in arbitrary-sized integer type. See L<http://doc.perl6.org/type/Int>.

=head2 int

=head2 interface

=head2 Intermediate Representation

In a compiler, Intermediate data structures that are generated from
the L</source code> to generate L</object code> or L</bytecode>.
In L</Rakudo> : L</parse tree>, and L<Abstract Syntax Tree|/AST>.
The L</parser> generates a  that is transformeed to an L</AST>s
Sometimes the information can be regenerated from the bytecode.
In rakudo the Single Static Assignment form is inferred from the bytecode.

=head2 interpreter

=head2 invocant

A L</method> has generally one invocant by may have many according to its L</signature>.
As a L<parameter(s)>, the parameters before the C<;>. 
As an L<argument>, the left L</operand> of the C<.> L</operator>.
In the L<expression|/Expression> C<42.say>, C<42> is the invocant. 
When missing, like in C<.say>, the invocant is C<$_>.

=head2 invokedynamic

A L</opcode> that makes possible the support of C</dynamic language>s in L</JVM>.
A L<presentation|http://www.infoq.com/presentations/invokedynamic> about invokedynamic.

=head2 IR

See L</Intermediate Representation>

=head2 IRC

Internet Relay Chat.  Perl 6 developers and users usually hang out on the
#perl6 channel on C<irc.freenode.org>. See also
L<http://perl6.org/community/irc>.

=head2 ISTR

I Seem To Remember.

=head2 item

=head2 item context

=head2 iteration

A way to go thru all the values of an L</Iterable> object like a L</list> or a L</hash>.
Generally, iterator L</object>s are invisible from user code because syntactical forms iterate
for the user and pass the resulting value to the expression or the block acting on the value.
Example:

   for 1..20 { .say }
   .say for 1..20

=head2 IWBN

It Would Be Nice.

=head1 J

=head2 jakudo

L</Rakudo> running on the L</JVM>.

=head2 JAST

Intermediate representation of code used in the JVM backend of Rakudo and NQP.

=head2 JIT

L<Just-in-time compilation|https://en.wikipedia.org/wiki/Just-in-time_compilation>,
a technique for improving performance of virtual machines.

=head2 Junction

A compound type that is transparent to many operations. See
L<http://doc.perl6.org/type/Junction>.

=head2 JVM

Java Virtual Machine. The Virtual machine for the Java programming language. Now many programming
languages including Perl 6 have L</compilers> that targets the JVM.

=head1 K

=head2 karma

A measure of appreciation on L</IRC>. Example:
"jnthn++ # moar commit"

=head2 KISS

L<Keep It Simple, Stupid!|https://en.wikipedia.org/wiki/KISS_principle>, a famous motto in computer science.

=head1 L

=head2 lambda

An anonymous function.
A block with explicit parameters:  C<<  -> $a { say $a }  >>
The C<< -> >> itself, or C<< <-> >> for writeable parameter.

=head2 lazy

The property of a list not to evaluate elements until they are needed.

=head2 laziness

=head2 lexical

Lexical properties are derived from the structure of the source code itself,
not from any information from run time.

=head2 lexical pad

A data structure that holds the values of lexical variables.

=head2 lexotic

A dynamic operation with a lexically scoped target. For example, C<return> has
a dynamic effect (it peels back the call stack), but the thing it's returning
from is a lexically defined routine.

=head2 LHF

Low Hanging Fruit.

=head2 Library

The compilation of a L</compilation unit> of source code written in non dynamic language like C
results in a library.

=head2 LIFO

L<Last In First Out|https://en.wikipedia.org/wiki/LIFO_(computing)>, a fairly common data structure in computer science.
In Perl 6 arrays behave as such when used as L</stack>.  See also L</FIFO>.

=head2 List

=head2 lmddgtfy

Let Me DuckDuckGo That For You.  L<http://lmddgtfy.net>

=head2 LMGTFY

Let Me Google That For You.  L<http://lmgtfy.com/>

=head2 LoL

B<L>ist B<o>f B<L>ist

=head2 LTA

Less Than Awesome.

=head2 LTM

See L<Longest Token Matching|http://perlcabal.org/syn/S05.html#Longest-token_matching>

=head1 M

=head2 machine code

Code specific to the L</instruction set> of an hardware architecture. Compare with L</bytecode>.

=head2 magic variable

L</Variable> that has a behavior of its own and that is denoted by
a sigiless name with a non alphanumeric character.
Unlike Perl 5 that has a profusion of magic variables, Perl 6 includes only the 
magic variables L</$_>, L</$/> and L<$!>. They are L</block> L</scope>d and implicitely
defined at the beginning of each block.

=head2 Match

L</Value> resulting from a L</match>.
In L</list context>, gives the positional L</capture>s list.
In L</hash context>, gives the named L</capture> hash.
In L</numeric context>, gives the matched string length.
In L</boolean context>, gives L</True> like any non class object.

=head2 match

A match is an operation that tests a L</string> against a L</grammar> or a L</regex>.
and returns an L</object> of L<Match> type in case of success, otherwise a L</Nil>

Matching against a C<regex> is a special case of L</smartmatching>.

See also L</parse>.

=head2 metamodel

The metamodel describe some L<OO> behaviors, like where to find a L</method>.
This permits to implement differnent OO behaviors in the same L</VM>.
The Perl 6 implementation of the metamodel is called L</6model>.
The metamodel should not be confused with the L</representation>.

=head2 method

methods are L</sub>s that are called with an L</invocant>.

=head2 MI

Multiple inheritance

=head2 mischan

A case of having put a message on the wrong (IRC) channel.

=head2 MMD

See L</multi-method dispatch>.

=head2 MoarVM

A virtual machine designed specifically for L</NQP> and its L</MOP>: L</6model>.
A document about MoarVM L<purpose|https://github.com/MoarVM/MoarVM/blob/master/docs/reveal.md>.
MoarVM has some similarities with the Hotspot VM so you may peruse its
L<glossary|http://openjdk.java.net/groups/hotspot/docs/HotSpotGlossary.html> for entries
missing from the present one.

=head2 module

=head2 MOP

Meta-Object Protocol.

=head2 MRO

Method Resolution Order

=head2 Mu

The mystical class from which all other classes are derived (無).

=head2 multi

L</sub>s, L</method>s, or L</rule>s that have the same name but are distinguished
by their signatures. Keyword that introduces them. The operation that dispatches a
call to the appropriate method is called L</multi-method dispatch>.

=head2 multi method

=head2 multi sub

=head2 multi-method dispatch

=head2 mumble

Placeholder; Something that's left unclear deliberately. Either because the
speaker doesn't know or because it's an unimportant detail.

=head2 my

=head2 MY::
    
A L</pseudo-scope> to access L</symbol>s  in the current L</lexical scope> (aka $?SCOPE).

=head1 N

=head2 named parameter

=head2 namespace

=head2 Native Call

=head2 Native value

A native value is a L</int>, L</num>, L</str>.
A native value cannot be undefined.

=head2 name

Syntactical convention to denote an entity in a program source code. Such an entity can be a
routine, a variable...
See also : L</symbol>, L</scope>, L</sigil>, L</role>, L</adverbial pair>.

=head2 need

=head2 NFA

Nondeterministic Finite Automaton, an algorithmic technique used by the
regex engine.  See: L<https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton>.

=head2 NFG

Proposed L</Unicode normalization form> for Perl6, in which composed
characters always get their own codepoint. If a codepoint doesn't exist
for that composed character, one is assigned dynamically.

Documentation for this can hypothetically be found in L<S15>.

=head2 Niecza

An implementation of Perl 6 targeting the .NET platform.

=head2 Nil

Means there is no value there which is different from C<()>, the L</empty list>.

=head2 NST

No Such Thing.

=head2 nom

The name of the main branch of current L</Rakudo> in L</git>.
Originally named so for its "new object model".

=head2 null-PMC access

=head2 Num

=head2 number

=head2 NQP

Short for B<N>ot B<Q>uite B<P>erl, a subset of Perl 6 suitable for tasks such as
implementing L</Rakudo>. Targets L</Parrot>, the L</JVM> and L</MoarVM>.

=head2 NSA

Native, Shaped Arrays.

=head1 O

=head2 Obfuscation

Code deliberately unreadable often using esoteric language features.
Sometimes combined with L</Golfing>.

=head2 object

=head2 Object code

For non L</dynamic languages>, from a L</compilation unit>, the L</compiler> generates
object code or library. A latter phase links object code to generate an executable.
For dynamic languages like Perl 6, the equivalent of object code is the L</bytecode> and
the linking phase is more complex and involves the deL</serialization> of information.

=head2 On Stack Replacement

According to the hotspot L</glossary|http://openjdk.java.net/groups/hotspot/docs/HotSpotGlossary.html> :  The process of converting
an interpreted (or less optimized) L</stack frame> into a compiled (or more optimized) stack frame.

=head2 OO

Object oriented.  See L</OOP>.

=head2 OOP

Acronym for L<Object-oriented programming|https://en.wikipedia.org/wiki/Object-oriented_programming>.

=head2 opcode

An opcode is an instruction in a bytecode.
Documentation about L</MoarVM> L<opcodes|https://github.com/MoarVM/MoarVM/blob/master/docs/bytecode.markdown>.

=head2 open source

=head2 operand

See L</operator>.

=head2 operator

An expression is made of operators and operands. More precisely it is made of an operator and
operands that can be subexpressions or L</values>.
Operators are an alternative syntax for a L<multi method>. With that syntax, what would be the L</argument>s of the function
are named operands instead. Operators are classified into L<categories|http://perlcabal.org/syn/S02.html#Grammatical_Categories> of categories.
A category has a precedence, an arity, can be L</fidly>, L</iffy>, L</diffy>.
Perl 6 is very creative as to what is an operator so they are many categories which operators are amde
of many tokens, possibly with a subexpression.  For example,  L<@a[0]> belongs to the
postcircumfix category is broken in the operand C<@a> and the
postcircumfix operator L<[0]> where C<0> is postcircumfixed subexpression.

The C<< <O(I<...>)>  >> construction gives information about an operator that completes the
information provided by its category.
Below C<%conditional> is the category, C<< :reducecheck<ternary> >> specifies to call C<.ternary> to
posprocess the L<parse subtree|parse tree> and C<< :pasttype<if> >> specify the nqp L</opcode> generated in the
L</AST> from the parse subtree

        <O('%conditional, :reducecheck<ternary>, :pasttype<if>')>

=head2 opt

An optimization, usually in either the context of L</spesh> or L</JIT>.

=head2 OSR

L</On Stack Replacement>

=head2 our

=head2 OUR::
    
A L</pseudo-scope> to access L</symbol>s in the current package (aka $?PACKAGE).

=head2 OUTER::

A L</pseudo-scope> to access L</symbol>s in the next outer L</lexical scope>.

=head1 P

=head2 package

=head2 package manager

=head2 pad

See L</lexical pad>.

=head2 Pair

The simplest object containing a key and value pair.


=head2 pair notation

Way of expressing key/value pairs, using the L</fat comma>, creating a L</Pair>
object, for instance:

  foo => 1

In contrast with the L</adverbial pair> notation.

=head2 Panda

A Perl 6 program designed to make it easier to download, compile and install L</module>s
according to the transitive dependencies specified in the C<META.info> medadata files
of said modules.
Unlike other L</package manager>s, panda supports many L</VM>s,
that is the three VMs supported by the L</Rakudo> compiler: L</MoarVM>, L</Parrot> and L</JVM>.
The official set of modules is called the L</ecosystem> according to the L</github> repository
name that contains the module list pointing to their respective repositories.


=head2 panda bootstrap script

=head2 parakudo

L</Rakudo> running on L</Parrot>.

=head2 parameter

In a L</signature>, defines how the corresponding L</argument> is bound when the
L</block>, L</sub> or L</method> with a signature is called.
Is often designated as formal parameter in the literature about other languages.
A parameter can be L</positional> or L</named>, either can be L</variadic> or not.

=head2 parrakudo

See L</parakudo>.

=head2 PARENT::
    
A L</pseudo-scope> to access lexical L</symbol>s in the unit's L<DSL> (usually L<CORE|/CORE::>).

=head2 Parrot

A virtual machine designed to run Perl 6 and other L</dynamic language>s. Mostly historic.

=head2 parser

The parser is the L</compiler> part that transforms the L</source code> into a L</parse tree>.
A parser is specified by a L</grammar>.
The code used by the parser leverages three different engines: the L<expression|/Expression> parser, a recursive engine,
a L</NFA> based engine. L</LTM> is a feature of the NFA engine. One difference between C<|> and C<||> is that the former
involves a NFA, while the latter involves the recursive engine. That's why the former is faster than the latter.

=head2 parse tree

=head2 PAST

Parrot L</AST>.

=head2 PAUSE

Perl Authors Upload SErvice.  The place where author upload their distributions
to L</CPAN>.

=head2 pb

Short for "problem".  As in "that's not the pb".

=head2 PBP

"Perl Best Practices".  The book by <NAME> outlining best practices
when programming Perl 5.

=head2 PDD

Parrot Design Document. Numbered documents detailing various parts of the
design of Parrot.

Could also be used to refer to "Presentation-Driven Development", the
practice of implementing a feature after having submitted a presentation
about said feature.

=head2 Perlito

A L</compiler> project that has frontends for Perl 5 and Perl 6, and multiple
backends.

=head2 phaser

A piece of code (a L</blast>) that runs at a particular phase in the program's
lifecycle, for example during L<compilation|/compiler> (C<BEGIN>), the first time a loop is
entered (C<FIRST>), or after al regular code has run (C<END>).

=head2 PIR

Parrot Intermediate Representation.

=head2 PMC

Parrot Magic Cookie.

=head2 pod

B<P>lain B<O>l' B<D>ocumentation, a documentation format understood by Perl<commit_msg>Add lemma for PIO<commit_after>=encoding utf8

=head1 TITLE

Synopsis 99: Glossary

=head1 VERSION

    Created: 26 June 2013

    Last Modified: 18 Aug 2014
    Version: 7

This document tries to define many of the terms used within the Perl 6
community.  It does not have an Apocalypse or Exegesis predecessor.  It
is intended as both a quick introduction to terms used on the #perl6
channel (on freenode), as well as a more permanent, and deeper source of
explanations in the context of Perl 6.

If you, as a reader, miss a term in a glossary, just add the term with the
explanation.  Or if you are not sure what the missing term means, just add a
header for the term.  Without doubt, someone else more knowledgable will add
the explanation later for you and everybody else.

=head1 A

=head2 ack

An improved version of L</grep>, written in Perl (L<http://beyondgrep.com>).

Also used by old folks to indicated acknowledgement.

=head2 actions

A class used to generate an L</AST> from the results of parsing text with a
L</grammar>. The method to attach a generated AST is called "make", the one
to retrieve an AST is called "made".

=head2 adverb

See L<adverbial pair>.

=head2 adverbial pair

A generalized form of L</pair notation>.  They all start with the colon, like:

  adverbial pair  | pair notation
  ================|==============
  :foo<bar>       | foo => 'bar'
  :foo(bar)       | foo => bar
  :$foo           | foo => $foo
  :foo            | foo => True
  :!foo           | foo => False

=head2 AFAICS

As Far As I Can See.

=head2 AFAICT

As Far As I Can Tell.

=head2 AFAIK

As Far As I Know.

=head2 afk

Away From Keyboard.  Logged in, but there's noone looking at the screen.

=head2 ALAP

As Late As Possible

=head2 Any

The class from which most things derive, except for L</Junction>s.
Any is derived from L</Mu>.

=head2 any()

A Junction with "or" semantics.

=head2 API

Application Programming Interface. Ideally, someone using your system or
library should be able to do so with knowledge only of the API, but not
necessarily knowing anything about the internals or implementation.

=head2 Apocalypse

A document originally written by L</TimToady>, in which he processed the
initial barrage of RFC's that came out of the Perl community.  Now only kept
as an historical document for reference.  See also L</Exegesis> and
L</Synopsis>.

=head2 arity

Number of L</operands> expected by an L</operator>.

=head2 argument

=head2 array

=head2 AST

Acronym for L<B<A>bstract B<S>yntax B<T>ree|http://en.wikipedia.org/wiki/Abstract_syntax_tree>.
Used in many places, including L</actions>, L</PAST>, and L</QAST>.

=head2 atomic

See L</CAS>.

=head2 attribute

Per-object storage slot. Other languages call it "Field", "Member", "Slot" or
"Property".

=head2 auth

Way of deliberately ambiguously expressing L</author> or L</authority>.

=head2 author

=head2 authority

=head2 autopun

"Are you ignorant or apathetic?" - "I don't know, and I don't care."

=head1 B

=head2 backlog

That part of a discussion on an L</IRC> channel that you've missed.  If it is
not or no longer available in your IRC client, you can go to sites such as
L<http://irc.perl6.org> to see what has been logged for you.

=head2 backtrack

Feature of a combinatorial algorithm which goes back one step toward the trunk
after failing exploring a branch of the potential solution space.
A string match is such a algorithm. Here, backtracking usually meains moving
back the L</cursor>. In a non greedy match, it means moving the cursor forward.

=head2 backend

Denote a VM targetted by L</Rakudo>. Can be L</MoarVM>, L</JVM> or L</Parrot>.

=head2 Bailador

Spanish for "dancer", The Bailador module (L<https://github.com/tadzik/Bailador/>)
is a port of Perl 5's Dancer web framework (L<http://perldancer.org/>).

=head2 bare string

An non quoted alphanumeric string. In Perl 6, only allowd at the left of a L</fat comma>.

=head2 biab

Back In A Bit.  Only L</afk> for a little while.

=head2 binary

An operator is binary or of L</arity> two if its L</category> is L</infix> or L</postcircumfix>.

=head2 blast

"B<Bl>ock, B<A>lternatively B<St>atement". Several constructs in Perl 6 expect
either a single L</statement>, or a L</block>. Thus, a blast:

    try { dangerous(); functions() };
    #   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  Block
    try dangerous-function();
    #   ^^^^^^^^^^^^^^^^^^^^          Statement

Particularly cute, because L</phaser>s expect blasts.

=head2 block

A source code section delimited by braces.
Used for L</control flow> and as L</scope>.

=head2 Bool

L</Boolean> type.

=head2 boolean

L</Value> of type L</Bool>. Apart the class itself, can be either C<True> or C<False>.

=head2 boolean context

A L</context> that forces an L<expression|/Expression> to give a L</boolean> value.
The L</prefix> L</operator>s C<so>, C<not> and their
repective higher L</precedence> C<?> and C<!> forms force a boolean context with C<!> and C<not> doing
a negation. 
The L</predicate> part of a L</control flow> L</statement> forces a boolean context.
A class can define a C<Bool> method to handle the boolean context.
For L<natives|/"Native value">, within L</MoarVM>, it is handled by C</MVMBoolificationSpec> member
of the L</stable> structure.

=head2 bootstrap

Starting up a system that uses itself to define, build or compile itself, is a practical exercise on solving the chicken and egg problem.
This phase is called bootstrap. L<Documentation|https://github.com/MoarVM/MoarVM/blob/master/docs/bootstrap.markdown>
about booststrapping the L</6model> of L<MoarVM>

=head2 boxing

Operation transforming a L<native value|/"Native value"> into an object.
The reverse operation is unboxing.
The relation between boxed/native should not be confused
with L</container>/containee.

=head2 branch

=head2 brb

Be Right Back.  Only L</afk> for a little while.

=head2 BS

Bounded Serialization.

=head2 Bug report

The way to report problems to the implementors.
For the interpretors themselves, use L</RT>.
It is good practice to include the interpreter L</version> in a bug report.
A short piece of example code that demonstrates the bug without requiring any
further set-up is usually very well received, too - see also L</golfing>
For the user packages hosted on L</github>, you can report issues.

=head2 bytecode

=head1 C

=head2 caller

The piece of code (or its lexical environment) that called a given piece of
code. Generally only known at run time.

=head2 CALLER::

A L</pseudo-scope> to access L</symbol>s in the L</caller>'s L</scope>.

=head2 Camelia

The butterfly-like logo of Perl 6 as can be observed at L<http://perl6.org>.

=head2 camelia

The IRC-bot on #perl6 that will evaluate code for you in various version of
Perl 5, Perl 6 and NQP.

=head2 capture

A regex can record substrings of the L</match>ed string that are matched capturing parts of the regex. That
part (and the matched text) is a capture.

For example

    if '..42' ~~ / \.+ (\d+) / {
        #              ^^^^^ capture
        say $0;
        #   ^^ capture variable
    }
    
C<(I<...>)> is the capture syntax while its non capturing counterpard is the grouping syntax : C<[I<...>]>.

=head2 CAS

An atomic Compare And Swap.  Primitive for lock-free multi-threaded read/write
access.

=head2 category

In L</grammar>s, regex of a L</multi> form a category that are distinguished
by their L</long name>. That includes the L<signature> but also the value
of the L<:sym> adverb. An L<expression|/Expression> is constituted of tokens that belongs
either in the category L</term> or one of the L</operator>s categories.

A regex definition for one of the term kinds :

    token term:sym<name> { ... }

=head2 CFG

1) Context Free Grammar.
2) see L</Control Flow Graph>.

=head2 circularity saw

A pun on "circular saw".  When bootstrapping a language in terms
of itself, we must rely on circular definitions in various places.
Obviously if we were really to use those circular definitions to
implement our language, we'll just get stuck in an infinite regress.
So instead we grab our trusty "circularity saw" to cut those circular
definitions in a spot deep down, hopefully in a way that the resulting
splice will be very difficult for the end-user to notice in day-to-day use.

=head2 circumfix

If a syntactic construct, for example a pair of parenthesis, surrounds another
piece of syntax, the surrounding first part is called a circumfix.

    say (2 + 3);
      # ^^^^^^^ circumfix
    say <a b c>;
      # ^^^^^^^ circumfix

=head2 class

A basic software structure in L</OOP>.
See the L<Wikipedia entry|http://en.wikipedia.org/wiki/Class_%28computer_programming%29>.

=head2 CLI

Command Line Interface, what you see in a Terminal (window).

=head2 clog

To L</backlog>.

Etymology: There is a website C<irclog.perlgeek.de> providing either IRC logs
or IR clogs, depending on how you interpret the domain name.

=head2 CLR

Common Language Runtime, as used by Niecza/mono/.NET.

=head2 comment

Parts of a program intend for user consumption that are not used to generate code.
Beside the C<#> that starts a comment that ends with the current line
Perl 6 supports many syntactic forms for different kinds of comments.
Like inline comments that can be used as L</whitespace>, or comments
that appear after a name declaration that are included in the L</pod>
documentation.

=head2 compilation unit

A L</compilation unit> is a set of files or a string that is compiled at once.
It involves the L</serialization> of code and data.

=head2 compile time

=head2 compiler

In a L</dynamic language> like Perl 6, the compiler is also referred as L</interpreter>.
In simpler dynamic languages like
Perl 5, the interpreter does not go through conceptual phases similar to the one for a compiler
of non dynamic language, the term compiler is rarely used.

When transforming L</concrete syntax> to L</bytecode>, the first conceptual phase is called L<parsing|/parse>
and generate a L</parse tree>. Next the parse tree is transformed into an abstract syntax tree which is a form
that can be optimised. Next the abstract tree is transformed to L</bytecode> in an L</compilation unit>.
Then, this bytecode is executed. Depending on the type of the data manipulated by the L</program>
bytecode can be transformed in optimised bytecode or into L</machine code>.
This last two operations are forms of L</JIT>.

=head2 COMPILING::

A L</pseudo-scope> to access lexical L</symbol>s in the L</scope> being compiled.

=head2 composer

A composer is a syntax for defining L</values>. When values are L</object>s, their composer is a L</Huffmanization>
of a L</constructor> L<expression|/Expression>. For an example, see the L</Fat comma>.

=head2 compunit

See L</compilation unit>.

=head2 concurrency

=head2 concrete

An L</object> L</value> is concrete when it is not the L</class> itself

=head2 concrete syntax

=head2 container

=head2 context

A context specifies the kind of value expected from an L<expression|/Expression>.
A context may be L<boolean context|/boolean>, L<numeric context|/numeric>, L<item context|/item>,
L<list context|/list> L<hash context|/hash>. 
Some L</prefix> L</operator>s are used to force the context;  

=head2 control flow

Without control flow statements, a program execution would be purely sequential.
Control flow statement generally uses a predicate and branches to one of its
subtatement according to the predicate value.

=head2 Control Flow Graph

in L</spesh>, a L</dominance> graph generated from L</bytecode> analysis so that L</Single Static Assignment>
can be done.

=head2 constant

A L</variable> that has a unchangeable L</value>.

=head2 constructor

The OO way to I<construct> object. L<Composer>s are constructor L</Huffmanization>s that are available for
the most common types like L</pairs>s

=head2 CORE::

A L</pseudo-scope> to access L</symbol>s of the outermost lexical L</scope>, definition of standard Perl.

=head2 CPAN

Comprehensive Perl Archive Network.  Content delivery system for Perl
distributions.

=head2 credentials

=head2 CUR

Short for C<CompUnitRepo>, the type of objects that inhabit C<@*INC>.

=head2 CURL

Short for C<CompUnitRepo::Local>, the type of C<CompUnitRepo> objects that
refer to the local file system.

=head1 D

=head2 dalek

An L</IRC> bot that reports when various projects have been updated. It gives
L</karma> to those who pushed the changes to the project.

=head2 DarkPAN

Perl code in production use at companies that has never been uploaded to CPAN.
As in "how will this change affect the DarkPAN", which can't be answered
because you generally don't have access to that code.

=head2 dead code

Code that is never called. For example

    sub f() {
        say 42;
        return;
        # everything below this is dead code,
        # because the return; above prevents it from running
        say 23;
    }

=head2 debugger

A piece of software that helps you to track down errors in your software.
It typically allows things like stepping through code, setting breakpoints
and inspecting variables.

=head2 dev

Either a developer (person), or a development version of a program, or a
branch for development in a repository.

=head2 DFS

Depth First Search. See L<also|http://xkcd.com/761/>.

=head2 dies_ok

A C<Test> function that succeeds when its argument, a Code object, dies at run
time. See L<S24|http://perlcabal.org/syn/S24.html>.

=head2 diffy

An L</operator> that produces a resulting L</value> of a L</type> different from its L</argument>s. For
example, all the comparison operators like C<==> and C<lt> are diffy (because
they produce C<Bool>s), the range operators are diffy (because they produce
ranges), but C<+> and C<~> and C<x> are not diffy because they (sorta, kinda)
emit what they accept.

The reason we care about operators being diffy or not is that you can basically
only reduce on non-diffy stuff. So C<[+]> makes sense, but C<[..]> doesn't.
(C<[==]> actually does makes sense even though it's diffy, but that's because
it's also chaining.) You also can't make assignment metaoperators from diffy
operators. So C<+=> makes sense, but C<..=> doesn't.

=head2 DIHWIDT

"Doctor, It Hurts When I Do This."  Well, stop doing it then.

=head2 dispatcher

The piece of code in the runtime that determines which (multi) method or
subroutine to invoke.

=head2 distribution

A collection of 1 or more L</compunit>s for installing locally, or for loading
from a remote location.

=head2 DSL

L</Domain Specific Language>. See L</slang>.

=head2 Domain specific language.

=head2 Dominance

See L</Control Flow Graph>

=head2 DYNAMIC::
    
A L</pseudo-scope> to access contextutal L</symbol>s  in my or any L</caller>'s lexical L</scope>.

=head2 dynamic

=head2 dynamic language

=head2 DWIM

Acronym for "B<D>o B<W>hat B<I> B<M>ean".  A programming language designer motto.

=head1 E

=head2 eager

One of the opposites of L</lazy>.

=head2 ecosystem

The L<ecosystem|https://github.com/perl6/ecosystem> is a repository of Perl 6 modules installable
by L</Panda>. L</Rakudo *> releases include a tested subset of the ecosystem.

=head2 edsel

Something that intends to please everyone by catering for everybody's taste,
yet in the end pleasing nobody, because nobody is catered for enough.

=head2 empty list

A list which contains no value. Noted C<()>.

=head2 EPIC FAIL

An internet expression describing the very dramatic, spectacular or just funny failure of an endeavor.
See the L<relevant Wikipedia entry|https://en.wikipedia.org/wiki/Failure#Internet_memes>.

=head2 EVAL

A Perl 6 command that takes a string as an argument and executes its content as Perl 6 code.

=head2 Exegesis

A document originally written by L</TheDamian>, in which he tried to explain
the L</Apocalypse>s to the common (wo)man.  Now only kept as an historical
document for reference.  See also L</Synopsis>.

=head2 export

See L</import>.

=head2 EXPORT

=head2 Expression

An expression is a part of a statement that is constituted of operators and their operands
and gives a value. The semantic of an expression may depend on its L</context>.
An expression is all or part of a L</statement>.

=head2 Extop

An extension to the default L</bytecode> L</instruction set> in L</Parrot> or L</MoarVM>.
Used to support L</opcode>s specific to a language.

=head1 F

=head2 FAIL

=head2 fat comma

Contrary to Perl 5, C<< => >>, the fat comma does not simply separate two values but makes
a L</Pair> out of them. The left value can be a L</bare string>. This is the only
place where Perl 6 accepts a bare string. Example:
    
      foo => bar

=head2 fiddly

Used of an L</operator> that doesn't participate in forming metaoperators at all.
(Because that would be "too fiddly" to get to work, presumably.) C<?? !!> is
such an operator. The method call operator is another. (And hence C<.=> is
actually a special case, not a "real" metaoperator.) List assignment is also
fiddly. (But item assignment is not.)

No meta in fiddly things. So you can't reduce, negate, reverse, sequence,
cross, zip, hyperify or assignify fiddly operators.

=head2 FIFO

L<First In First Out|https://en.wikipedia.org/wiki/FIFO>, a fairly common data
structure in programming languages.
In Perl 6 an array behaves as such when used as a L</queue>.
See also L</LIFO>.

=head2 flap

Sometimes a test will fail under some conditions, but not others; when
this test passes some test runs and fails others, it's called flapping.

=head2 fork

The creation of another process.

Also, a feature of L</github> that copies a repository from one user to another,
to allow users to make changes to a repository without needing permissions on
the original project. After a user makes changes they will likely submit a
L</pull request>.

=head2 fossil

Something in a generally current document that is no longer true but which has
not yet been fixed by correcting or removing it.

=head2 FSVO

For Some Value Of.

=head2 FTFY

Fixed That For You.

=head2 fudge

Way to temporarily mark tests in the L</spectest> for a specific Perl 6 version
as I<todo> (so that a failure of the test will be marked ok, and a pass will
be marked as an exception), or as I<skip> if they cause a L</compile-time> or
L</runtime> exception.

=head1 G

=head2 GC

Garbage collecting.

=head2 gimme

=head2 gist

A summary, or a method on objects that is invoked by L</say> to print out the
object in a human readable format, or a paste server used by denizens of L</IRC>.

See L<https://gist.github.com> for the last usage.

=head2 git

The distributed source revision system used by many, if not all Perl 6
projects, generally hosted on L</github>. A good L<glossary|https://www.kernel.org/pub/software/scm/git/docs/gitglossary.html> about git.
A good L<reference|http://git-scm.com/book>.

=head2 git submodule

A way to use a git L<repositories|/repository> from one git repository.
L<More information|http://git-scm.com/book/en/Git-Tools-Submodules>/

=head2 github

Online open source repository hoster using L</git>.
The C<ecosystem> is hosted on github.

=head2 given

keyword for the Perl 6 switch L</statement>.

=head2 GLOBAL::

A L</pseudo-scope> for L</interpreter>-wide L</package> L</symbol>s, really UNIT::GLOBAL.

=head2 GLR

The Great List Refactor: a refactoring of the reification of lazy lists, so that
lazy evaluation is only done when it is really needed.  Expected to provide a
performance benefit of several factors in certain, loop-like situations.

=head2 golf

Shortest possible way (least amount of typed characters) to get a program to do
what you want, or to describe a problem or bug.

In the case of bug hunting, the aim is only partly "fewest characters" and
partly "fewest concepts". The aim being to show exactly what concepts are
necessary to trigger the surprising behavior.

=head2 golfing

The process of creating the shortest possible program to prove what you want.
Sometimes also a form of L</obfuscation>.

=head2 good *

Good morning/afternoon/evening.  Since the contributors are in many different
timezones, one contributor's morning is another contributor's evening.

=head2 grammar

A feature of Perl 6 that uses L</regex>es to implement a grammar for parsing
text. Perl 6 implementations use grammars themselves to parse the language. The
results of parsing with a grammar can be further passed on to L</actions>.
A grammar is composed of methods introduced by one of the three keywords
C<rule>, C<L</token>>, C<regex>. There is L</backtrack>ing only in C<regex> and
C<rule> implies L</whitespace>s between subrules.

=head2 green threads

Threads that are scheduled by the virtual machine, not by the operating
system.

=head1 H

=head2 hash

A data type, conveniently available in variables starting with the percent sign
C<%> and provided by types conformant to the C<Associative> role like the C<Hash> type.
Often called associative table in other languages.

=head2 High Level Language

A high level language provides abstractions that decouples it from specific operating systems
and processors. Perl 6 is such a language and provides some interoperability with other HLLs when they are
compiled with the rakudo toolkit.
Some of these abstractions like arrays, associative tables, integers, floats, strings and objects are common
to many languages but specific semantic and underlying type L</representation>s may differ.
Also, a given language may provide many flavors of them.
Perl 6 provides common L</concrete syntax> to access them.
C<MVMHLLConfig> is the L</MoarVM> C level structure that hooks
to the underlying language specific representations.
The L</metamodel> allows to express specific semantics proper to a given L</OO> language.
L</Zavolaj> provides interoperabiity with languages which compilers
follow C language linking conventions.

=head2 HLL

See L</High Level Language>.

=head2 HN

Hacker news as seen on L<https://news.ycombinator.com>.

=head2 HN'ed

Being mentioned on Hacker news (L<https://news.ycombinator.com>).

=head2 HPMoR

<NAME>ter and the Methods of Rationality. An inexplicably good Harry Potter
fanfic with far more significance than the word "fanfic" might lead you to
believe. See L<http://hpmor.com>.

=head2 Huffmanization

L<Huffman coding|http://en.wikipedia.org/wiki/Huffman_coding> is a compression algorithm that encodes
common symbols with a short code. By analogy, we call huffmanization alternative and shorter syntax
for common syntax constructs. The cost of huffmanization is the cost of learning additional syntax.
In Perl 6, L</composer>s are a form of huffmanization.

=head2 hyper

Process data asynchronously when possible, but return the result data in the
order it would have been if the source data had been processed in a single
thread/process.

=head2 hypothetical variable

=head1 I

=head2 IC

I see.

=head2 iffy

Used of an operator that either returns a C<Bool> result, I<or something like
it> (such as a match object). All the comparison operators are iffy, as are
conditional operators like C<&&>, C<?^>, and C<or>. C<%%> is iffy, but C<%>
isn't. The junctive operators are iffy.

The reason that we care about iffy operators is that you can only append the
C<!> metaoperator to an operator that's iffy.

=head2 IIRC

If I Remember Correctly.

=head2 IIUC

If I Understand Correctly.

=head2 import

L</Module>s interact with each other through named entities called symbols.
The operation that makes symbols from a module avalaible to another
module is called import while the operation of using such a name is called import.

=head2 infix

An operator that can appear between two terms.

=head2 inline

=head2 install

=head2 installer

=head2 Int

A built-in arbitrary-sized integer type. See L<http://doc.perl6.org/type/Int>.

=head2 int

=head2 interface

=head2 Intermediate Representation

In a compiler, Intermediate data structures that are generated from
the L</source code> to generate L</object code> or L</bytecode>.
In L</Rakudo> : L</parse tree>, and L<Abstract Syntax Tree|/AST>.
The L</parser> generates a  that is transformeed to an L</AST>s
Sometimes the information can be regenerated from the bytecode.
In rakudo the Single Static Assignment form is inferred from the bytecode.

=head2 interpreter

=head2 invocant

A L</method> has generally one invocant by may have many according to its L</signature>.
As a L<parameter(s)>, the parameters before the C<;>. 
As an L<argument>, the left L</operand> of the C<.> L</operator>.
In the L<expression|/Expression> C<42.say>, C<42> is the invocant. 
When missing, like in C<.say>, the invocant is C<$_>.

=head2 invokedynamic

A L</opcode> that makes possible the support of C</dynamic language>s in L</JVM>.
A L<presentation|http://www.infoq.com/presentations/invokedynamic> about invokedynamic.

=head2 IR

See L</Intermediate Representation>

=head2 IRC

Internet Relay Chat.  Perl 6 developers and users usually hang out on the
#perl6 channel on C<irc.freenode.org>. See also
L<http://perl6.org/community/irc>.

=head2 ISTR

I Seem To Remember.

=head2 item

=head2 item context

=head2 iteration

A way to go thru all the values of an L</Iterable> object like a L</list> or a L</hash>.
Generally, iterator L</object>s are invisible from user code because syntactical forms iterate
for the user and pass the resulting value to the expression or the block acting on the value.
Example:

   for 1..20 { .say }
   .say for 1..20

=head2 IWBN

It Would Be Nice.

=head1 J

=head2 jakudo

L</Rakudo> running on the L</JVM>.

=head2 JAST

Intermediate representation of code used in the JVM backend of Rakudo and NQP.

=head2 JIT

L<Just-in-time compilation|https://en.wikipedia.org/wiki/Just-in-time_compilation>,
a technique for improving performance of virtual machines.

=head2 Junction

A compound type that is transparent to many operations. See
L<http://doc.perl6.org/type/Junction>.

=head2 JVM

Java Virtual Machine. The Virtual machine for the Java programming language. Now many programming
languages including Perl 6 have L</compilers> that targets the JVM.

=head1 K

=head2 karma

A measure of appreciation on L</IRC>. Example:
"jnthn++ # moar commit"

=head2 KISS

L<Keep It Simple, Stupid!|https://en.wikipedia.org/wiki/KISS_principle>, a famous motto in computer science.

=head1 L

=head2 lambda

An anonymous function.
A block with explicit parameters:  C<<  -> $a { say $a }  >>
The C<< -> >> itself, or C<< <-> >> for writeable parameter.

=head2 lazy

The property of a list not to evaluate elements until they are needed.

=head2 laziness

=head2 lexical

Lexical properties are derived from the structure of the source code itself,
not from any information from run time.

=head2 lexical pad

A data structure that holds the values of lexical variables.

=head2 lexotic

A dynamic operation with a lexically scoped target. For example, C<return> has
a dynamic effect (it peels back the call stack), but the thing it's returning
from is a lexically defined routine.

=head2 LHF

Low Hanging Fruit.

=head2 Library

The compilation of a L</compilation unit> of source code written in non dynamic language like C
results in a library.

=head2 LIFO

L<Last In First Out|https://en.wikipedia.org/wiki/LIFO_(computing)>, a fairly common data structure in computer science.
In Perl 6 arrays behave as such when used as L</stack>.  See also L</FIFO>.

=head2 List

=head2 lmddgtfy

Let Me DuckDuckGo That For You.  L<http://lmddgtfy.net>

=head2 LMGTFY

Let Me Google That For You.  L<http://lmgtfy.com/>

=head2 LoL

B<L>ist B<o>f B<L>ist

=head2 LTA

Less Than Awesome.

=head2 LTM

See L<Longest Token Matching|http://perlcabal.org/syn/S05.html#Longest-token_matching>

=head1 M

=head2 machine code

Code specific to the L</instruction set> of an hardware architecture. Compare with L</bytecode>.

=head2 magic variable

L</Variable> that has a behavior of its own and that is denoted by
a sigiless name with a non alphanumeric character.
Unlike Perl 5 that has a profusion of magic variables, Perl 6 includes only the 
magic variables L</$_>, L</$/> and L<$!>. They are L</block> L</scope>d and implicitely
defined at the beginning of each block.

=head2 Match

L</Value> resulting from a L</match>.
In L</list context>, gives the positional L</capture>s list.
In L</hash context>, gives the named L</capture> hash.
In L</numeric context>, gives the matched string length.
In L</boolean context>, gives L</True> like any non class object.

=head2 match

A match is an operation that tests a L</string> against a L</grammar> or a L</regex>.
and returns an L</object> of L<Match> type in case of success, otherwise a L</Nil>

Matching against a C<regex> is a special case of L</smartmatching>.

See also L</parse>.

=head2 metamodel

The metamodel describe some L<OO> behaviors, like where to find a L</method>.
This permits to implement differnent OO behaviors in the same L</VM>.
The Perl 6 implementation of the metamodel is called L</6model>.
The metamodel should not be confused with the L</representation>.

=head2 method

methods are L</sub>s that are called with an L</invocant>.

=head2 MI

Multiple inheritance

=head2 mischan

A case of having put a message on the wrong (IRC) channel.

=head2 MMD

See L</multi-method dispatch>.

=head2 MoarVM

A virtual machine designed specifically for L</NQP> and its L</MOP>: L</6model>.
A document about MoarVM L<purpose|https://github.com/MoarVM/MoarVM/blob/master/docs/reveal.md>.
MoarVM has some similarities with the Hotspot VM so you may peruse its
L<glossary|http://openjdk.java.net/groups/hotspot/docs/HotSpotGlossary.html> for entries
missing from the present one.

=head2 module

=head2 MOP

Meta-Object Protocol.

=head2 MRO

Method Resolution Order

=head2 Mu

The mystical class from which all other classes are derived (無).

=head2 multi

L</sub>s, L</method>s, or L</rule>s that have the same name but are distinguished
by their signatures. Keyword that introduces them. The operation that dispatches a
call to the appropriate method is called L</multi-method dispatch>.

=head2 multi method

=head2 multi sub

=head2 multi-method dispatch

=head2 mumble

Placeholder; Something that's left unclear deliberately. Either because the
speaker doesn't know or because it's an unimportant detail.

=head2 my

=head2 MY::
    
A L</pseudo-scope> to access L</symbol>s  in the current L</lexical scope> (aka $?SCOPE).

=head1 N

=head2 named parameter

=head2 namespace

=head2 Native Call

=head2 Native value

A native value is a L</int>, L</num>, L</str>.
A native value cannot be undefined.

=head2 name

Syntactical convention to denote an entity in a program source code. Such an entity can be a
routine, a variable...
See also : L</symbol>, L</scope>, L</sigil>, L</role>, L</adverbial pair>.

=head2 need

=head2 NFA

Nondeterministic Finite Automaton, an algorithmic technique used by the
regex engine.  See: L<https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton>.

=head2 NFG

Proposed L</Unicode normalization form> for Perl6, in which composed
characters always get their own codepoint. If a codepoint doesn't exist
for that composed character, one is assigned dynamically.

Documentation for this can hypothetically be found in L<S15>.

=head2 Niecza

An implementation of Perl 6 targeting the .NET platform.

=head2 Nil

Means there is no value there which is different from C<()>, the L</empty list>.

=head2 NST

No Such Thing.

=head2 nom

The name of the main branch of current L</Rakudo> in L</git>.
Originally named so for its "new object model".

=head2 null-PMC access

=head2 Num

=head2 number

=head2 NQP

Short for B<N>ot B<Q>uite B<P>erl, a subset of Perl 6 suitable for tasks such as
implementing L</Rakudo>. Targets L</Parrot>, the L</JVM> and L</MoarVM>.

=head2 NSA

Native, Shaped Arrays.

=head1 O

=head2 Obfuscation

Code deliberately unreadable often using esoteric language features.
Sometimes combined with L</Golfing>.

=head2 object

=head2 Object code

For non L</dynamic languages>, from a L</compilation unit>, the L</compiler> generates
object code or library. A latter phase links object code to generate an executable.
For dynamic languages like Perl 6, the equivalent of object code is the L</bytecode> and
the linking phase is more complex and involves the deL</serialization> of information.

=head2 On Stack Replacement

According to the hotspot L</glossary|http://openjdk.java.net/groups/hotspot/docs/HotSpotGlossary.html> :  The process of converting
an interpreted (or less optimized) L</stack frame> into a compiled (or more optimized) stack frame.

=head2 OO

Object oriented.  See L</OOP>.

=head2 OOP

Acronym for L<Object-oriented programming|https://en.wikipedia.org/wiki/Object-oriented_programming>.

=head2 opcode

An opcode is an instruction in a bytecode.
Documentation about L</MoarVM> L<opcodes|https://github.com/MoarVM/MoarVM/blob/master/docs/bytecode.markdown>.

=head2 open source

=head2 operand

See L</operator>.

=head2 operator

An expression is made of operators and operands. More precisely it is made of an operator and
operands that can be subexpressions or L</values>.
Operators are an alternative syntax for a L<multi method>. With that syntax, what would be the L</argument>s of the function
are named operands instead. Operators are classified into L<categories|http://perlcabal.org/syn/S02.html#Grammatical_Categories> of categories.
A category has a precedence, an arity, can be L</fidly>, L</iffy>, L</diffy>.
Perl 6 is very creative as to what is an operator so they are many categories which operators are amde
of many tokens, possibly with a subexpression.  For example,  L<@a[0]> belongs to the
postcircumfix category is broken in the operand C<@a> and the
postcircumfix operator L<[0]> where C<0> is postcircumfixed subexpression.

The C<< <O(I<...>)>  >> construction gives information about an operator that completes the
information provided by its category.
Below C<%conditional> is the category, C<< :reducecheck<ternary> >> specifies to call C<.ternary> to
posprocess the L<parse subtree|parse tree> and C<< :pasttype<if> >> specify the nqp L</opcode> generated in the
L</AST> from the parse subtree

        <O('%conditional, :reducecheck<ternary>, :pasttype<if>')>

=head2 opt

An optimization, usually in either the context of L</spesh> or L</JIT>.

=head2 OSR

L</On Stack Replacement>

=head2 our

=head2 OUR::
    
A L</pseudo-scope> to access L</symbol>s in the current package (aka $?PACKAGE).

=head2 OUTER::

A L</pseudo-scope> to access L</symbol>s in the next outer L</lexical scope>.

=head1 P

=head2 package

=head2 package manager

=head2 pad

See L</lexical pad>.

=head2 Pair

The simplest object containing a key and value pair.


=head2 pair notation

Way of expressing key/value pairs, using the L</fat comma>, creating a L</Pair>
object, for instance:

  foo => 1

In contrast with the L</adverbial pair> notation.

=head2 Panda

A Perl 6 program designed to make it easier to download, compile and install L</module>s
according to the transitive dependencies specified in the C<META.info> medadata files
of said modules.
Unlike other L</package manager>s, panda supports many L</VM>s,
that is the three VMs supported by the L</Rakudo> compiler: L</MoarVM>, L</Parrot> and L</JVM>.
The official set of modules is called the L</ecosystem> according to the L</github> repository
name that contains the module list pointing to their respective repositories.


=head2 panda bootstrap script

=head2 parakudo

L</Rakudo> running on L</Parrot>.

=head2 parameter

In a L</signature>, defines how the corresponding L</argument> is bound when the
L</block>, L</sub> or L</method> with a signature is called.
Is often designated as formal parameter in the literature about other languages.
A parameter can be L</positional> or L</named>, either can be L</variadic> or not.

=head2 parrakudo

See L</parakudo>.

=head2 PARENT::
    
A L</pseudo-scope> to access lexical L</symbol>s in the unit's L<DSL> (usually L<CORE|/CORE::>).

=head2 Parrot

A virtual machine designed to run Perl 6 and other L</dynamic language>s. Mostly historic.

=head2 parser

The parser is the L</compiler> part that transforms the L</source code> into a L</parse tree>.
A parser is specified by a L</grammar>.
The code used by the parser leverages three different engines: the L<expression|/Expression> parser, a recursive engine,
a L</NFA> based engine. L</LTM> is a feature of the NFA engine. One difference between C<|> and C<||> is that the former
involves a NFA, while the latter involves the recursive engine. That's why the former is faster than the latter.

=head2 parse tree

=head2 PAST

Parrot L</AST>.

=head2 PAUSE

Perl Authors Upload SErvice.  The place where author upload their distributions
to L</CPAN>.

=head2 pb

Short for "problem".  As in "that's not the pb".

=head2 PBP

"Perl Best Practices".  The book by <NAME> outlining best practices
when programming Perl 5.

=head2 PDD

Parrot Design Document. Numbered documents detailing various parts of the
design of Parrot.

Could also be used to refer to "Presentation-Driven Development", the
practice of implementing a feature after having submitted a presentation
about said feature.

=head2 Perlito

A L</compiler> project that has frontends for Perl 5 and Perl 6, and multiple
backends.

=head2 phaser

A piece of code (a L</blast>) that runs at a particular phase in the program's
lifecycle, for example during L<compilation|/compiler> (C<BEGIN>), the first time a loop is
entered (C<FIRST>), or after al regular code has run (C<END>).

=head2 PIO

An implementation specific internal object for doing I/O.  Originally a
Parrot I/O object, now a Perl I/O object.

=head2 PIR

Parrot Intermediate Representation.

=head2 PMC

Parrot Magic Cookie.

=head2 pod

B<P>lain B<O>l' B<D>ocumentation, a documentation format understood by Perl
{'fraction_non_alphanumeric': 0.08301423402963003, 'fraction_numerical': 0.010338817439987324, 'mean_word_length': 4.1048126179563225, 'pattern_counts': {'":': 0, '<': 1015, '<?xml version=': 0, '>': 1035, 'https://': 32, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6152112', 'n_tokens_mistral': 23552, 'n_tokens_neox': 22522, 'n_words': 10890}