CINXE.COM
Glossary | Raku Documentation
<!DOCTYPE html> <html lang="en" class="fontawesome-i2svg-active fontawesome-i2svg-complete" style="scroll-padding-top:60px"> <head> <title>Glossary | Raku Documentation</title> <meta charset="UTF-8" /> <link href="/assets/images/Camelia.ico" rel="icon" type="image/x-icon"/> <link rel="stylesheet" href="/assets/css/Website.css"/> <link rel="stylesheet" href="/assets/css/typegraph-styling.css"/> <link rel="stylesheet" href="/assets/css/typegraph-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/typegraph-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/filtered-toc-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/filtered-toc-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/announce-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/announce-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/all.min.css"/> <link rel="stylesheet" href="/assets/css/listf-styling-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/listf-styling-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/options-search-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/options-search-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/page-styling-main.css"/> <link rel="stylesheet" href="/assets/css/css/page-styling-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/page-styling-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/chyronToggle-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/chyronToggle-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/centreToggle-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/centreToggle-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/tm-styling.css"/> <link rel="stylesheet" href="/assets/css/tm-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/tm-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/rainbow-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/rainbow-light.css" title="light"/> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@10.2.7/dist/css/autoComplete.min.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-light.min.css" title="light" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css" title="dark" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="/assets/scripts/all.min.js"></script><script src="/assets/scripts/filter-script.js"></script><script src="/assets/scripts/tableManager.js"></script><script src="https://cdn.jsdelivr.net/npm/fuzzysort@2.0.4/fuzzysort.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@10.2.7/dist/autoComplete.min.js"></script><script src="/assets/scripts/filtered-toc.js"></script><script src="/assets/scripts/options-search.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/haskell.min.js"></script><script src="/assets/scripts/page-styling.js"></script><script src="/assets/scripts/announcements.js"></script><script src="/assets/scripts/rainbow.js"></script> </head> <body class="has-navbar-fixed-top"> <div id="Glossary" class="top-of-page"></div> <nav class="navbar is-fixed-top is-flex-touch" role="navigation" aria-label="main navigation"> <div class="navbar-item" style="margin-left: auto;"> <div class="left-bar-toggle" title="Toggle Table of Contents & Index"> <label class="chyronToggle left"> <input id="navbar-left-toggle" type="checkbox"> <span class="text">Contents</span> </label> </div> </div> <div class="container is-justify-content-space-around"> <div class="navbar-brand"> <div class="navbar-logo"> <a class="navbar-item" href="/"> <img src="/assets/images/camelia-recoloured.png" alt="Raku" width="52.83" height="38"> </a> <span class="navbar-logo-tm">tm</span> </div> <a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navMenu"> <span aria-hidden="true"></span> <span aria-hidden="true"></span> <span aria-hidden="true"></span> </a> </div> <div id="navMenu" class="navbar-menu"> <div class="navbar-start"> <a class="navbar-item" href="/introduction" title="Getting started, Tutorials, Migration guides"> Introduction </a> <a class="navbar-item" href="/reference" title="Fundamentals, General reference"> Reference </a> <a class="navbar-item" href="/miscellaneous" title="Programs, Experimental"> Miscellaneous </a> <a class="navbar-item" href="/types" title="The core types (classes) available"> Types </a> <a class="navbar-item" href="/routines" title="Searchable table of routines"> Routines </a> <a class="navbar-item" href="https://raku.org" title="Home page for community"> Raku<sup>®</sup> </a> <a class="navbar-item" href="https://web.libera.chat/#raku" title="IRC live chat"> Chat </a> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"> More </a> <div class="navbar-dropdown is-right is-rounded"> <hr class="navbar-divider"> <a class="navbar-item js-modal-trigger" data-target="download-ebook"> Download E-Book (epub) </a> <hr class="navbar-divider"> <a class="navbar-item" href="/about"> About </a> <hr class="navbar-divider"> <a class="navbar-item has-text-red" href="https://github.com/raku/doc-website/issues"> Report an issue with this site </a> <hr class="navbar-divider"> <a class="navbar-item" href="https://github.com/raku/doc/issues"> Report an issue with the documentation content </a> <hr class="navbar-divider"> <label class="navbar-item centreToggle" title="Enable/Disable Announcements" style="--switch-width: 18"> <input id="cancelAnnouncements" type="checkbox"> <span class="text">Announcements</span> <span class="on">suppressed</span> <span class="off">allowed</span> </label> </div> </div> </div> <div class="navbar-end navbar-search-wrapper"> <div class="navbar-item"> <div class="field has-addons"> <div class="autoComplete_options"> <input class="control input" id="autoComplete" type="search" dir="ltr" spellcheck=false autocorrect="off" autocomplete="off" autocapitalize="off" placeholder="🔍 Type f to search for ..."> </div> <div class="control" title="Search options"> <a class="button is-primary js-modal-trigger" data-target="options-search-info"> <span class="icon"> <i class="fas fa-cogs"></i> </span> </a> </div> </div> </div> </div> <div id="options-search-info" class="modal"> <div class="modal-background"></div> <div class="modal-content"> <div class="box"> <p>The last search was: <span id="selected-candidate" class="ss-selected"></span></p> <div class="control is-grouped is-grouped-centered options-search-controls"> <label class="centreToggle" title="Include extra information (Alt-E)" style="--switch-width: 10.5"> <input id="options-search-extra" type="checkbox"> <span class="text">Extra info</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>The search response can be shortened by excluding the extra information line (Alt-E)</p> <label class="centreToggle" title="Search engine type Strict/Loose (Alt-L)" style="--switch-width: 10.5"> <input id="options-search-loose" type="checkbox"> <span class="text">Search type</span> <span class="on">loose</span> <span class="off">strict</span> </label> <p> The search engine can perform a strict search (only the characters in the search box) or a loose search (Alt-L)</p> <label class="centreToggle" title="Search in headings (Alt-H)" style="--switch-width: 10.5"> <input id="options-search-headings" type="checkbox"> <span class="text">Headings</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search through headings in all web-pages (Alt-H)</p> <label class="centreToggle" title="Search indexed items (Alt-I)" style="--switch-width: 10.5"> <input id="options-search-indexed" type="checkbox"> <span class="text">Indexed</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search through all indexed items (Alt-I)</p> <label class="centreToggle" title="Search composite pages (Alt-C)" style="--switch-width: 10.5"> <input id="options-search-composite" type="checkbox"> <span class="text">Composite</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search in the names of composite pages, which combine similar information from the main web pages (Alt-C)</p> <label class="centreToggle" title="Search primary sources (Alt-P)" style="--switch-width: 10.5"> <input id="options-search-primary" type="checkbox"> <span class="text">Primary</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search through the names of the main web pages (Alt-P)</p> <label class="centreToggle" title="Open in new tab (Alt-Q)" style="--switch-width: 10.5"> <input id="options-search-newtab" type="checkbox"> <span class="text">New tab</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Once a search candidate has been chosen, it can be opened in a new tab or in the current tab (Alt-Q)</p> <p>If all else fails, an item is added to use the Google search engine on the whole site</p> <button class="button is-warning" id="options-search-reset-defaults">Clear options, reset to defaults</button> <p>Exit this page by pressing <Escape>, or clicking on X or on the background.</p> </div> </div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> </div> <div id="download-ebook" class="modal"> <div class="modal-background"></div> <div class="modal-content"> <div class="box"> <p><a href="/RakuDocumentation.epub" download>RakuDocumentation.epub</a> is a work in progress e-book. It targets the <a href="https://www.w3.org/publishing/epub3/">EPUB v3 specification</a>. It needs testing on a variety of ereaders (some of which may still implicitly expect compliance with EPUB v2). The CSS definitely needs enhancing (especially for code snippets). The Ebook opens in a Calibre reader, which is available on all operating systems.</p> <p>Suggestions are welcome and should be addressed by opening an issue on the Raku/doc-website repository</p> <p>Exit this popup by pressing <Escape>, or clicking on X or on the background.</p> </div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> <div id="announcement-modal" class="modal"> <div class="modal-background"></div> <div class="modal-content"> <div class="box"> <div id="raku-doc-announcement"></div> <p>For more see <a href="/announcements">Announcements page</a>.</p> <p>Exit this popup by pressing <Escape>, or clicking on X or on the background.</p> </div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> </div> </nav> <div class="tile is-ancestor section"> <div class="page-edit"> <a class="button page-edit-button" href="https://github.com/Raku/doc/edit/main/doc/Language/glossary.rakudoc" title="Edit this page. Commit: 867604335 2024-12-30"> <span class="icon is-right"> <i class="fas fa-pen-alt is-medium"></i> </span> </a> </div> <div id="left-column" class="tile is-parent is-2 is-hidden"> <div id="left-col-inner"> <div class="tabs" id="tabs"> <ul> <li class="is-active" id="toc-tab"> <a>Table of Contents</a> </li> <li id="index-tab"> <a>Index</a> </li> </ul> </div> <div class="field"> <div class="control has-icons-right"> <input id="toc-filter" class="input" type="text" placeholder="Filter"> <span class="icon is-right has-text-grey"> <i class="fas fa-search is-medium"></i> </span> </div> </div> <div class="raku-sidebar"> <aside id="toc-menu" class="menu"> <ul class="menu-list"> <li><a href="#Abstract_class">Abstract class</a></li> <li><a href="#Advent_calendar">Advent calendar</a></li> <li><a href="#Adverb">Adverb</a></li> <li><a href="#Adverbial_pair">Adverbial pair</a></li> <li><a href="#Allomorph">Allomorph</a></li> <li><a href="#Anonymous">Anonymous</a></li> <li><a href="#API">API</a></li> <li><a href="#Apocalypse">Apocalypse</a></li> <li><a href="#Arity">Arity</a></li> <li><a href="#ASCII_operator">ASCII operator</a></li> <li><a href="#Autothreading">Autothreading</a></li> <li><a href="#Backtracking">Backtracking</a></li> <li><a href="#binder">binder</a></li> <li><a href="#block">block</a></li> <li><a href="#bytecode">bytecode</a></li> <li><a href="#Camelia">Camelia</a></li> <li><a href="#Colon_pair_and_colon_list">Colon pair and colon list</a></li> <li><a href="#Community">Community</a></li> <li><a href="#Damian_Conway">Damian Conway</a></li> <li><a href="#decont">decont</a></li> <li><a href="#diffy">diffy</a></li> <li><a href="#Exegesis">Exegesis</a></li> <li><a href="#Forward_declarations">Forward declarations</a></li> <li><a href="#fiddly">fiddly</a></li> <li><a href="#Handle">Handle</a></li> <li><a href="#Huffmanize">Huffmanize</a></li> <li><a href="#iffy">iffy</a></li> <li><a href="#import">import</a></li> <li><a href="#infix_stopper">infix stopper</a></li> <li><a href="#Instance">Instance</a></li> <li><a href="#Interface">Interface</a></li> <li><a href="#Invocant">Invocant</a></li> <li><a href="#IRC">IRC</a></li> <li><a href="#IRC_lingo">IRC lingo</a></li> <ul> <li><a href="#ALAP">ALAP</a></li> <li><a href="#autopun">autopun</a></li> <li><a href="#backlog">backlog</a></li> <li><a href="#Bot">Bot</a></li> <li><a href="#Compilation_unit_or_compunit">Compilation unit or compunit</a></li> <li><a href="#DWIM">DWIM</a></li> <li><a href="#flap">flap</a></li> <li><a href="#fossil">fossil</a></li> <li><a href="#FSVO">FSVO</a></li> <li><a href="#FTFY">FTFY</a></li> <li><a href="#gradual_typing">gradual typing</a></li> <li><a href="#IIRC">IIRC</a></li> <li><a href="#IMHO">IMHO</a></li> <li><a href="#IWBN">IWBN</a></li> <li><a href="#LHF">LHF</a></li> <li><a href="#LGTM">LGTM</a></li> <li><a href="#LTA">LTA</a></li> <li><a href="#NST">NST</a></li> <li><a href="#Opt">Opt</a></li> <li><a href="#PB">PB</a></li> <li><a href="#PR">PR</a></li> <li><a href="#P5">P5</a></li> <li><a href="#P6">P6</a></li> <li><a href="#RSN">RSN</a></li> <li><a href="#RT">RT</a></li> <li><a href="#TIMTOWTDI">TIMTOWTDI</a></li> <li><a href="#TMI">TMI</a></li> <li><a href="#TMTOWTDI">TMTOWTDI</a></li> <li><a href="#UGT">UGT</a></li> <li><a href="#WFM">WFM</a></li> <li><a href="#WIP">WIP</a></li> <li><a href="#WP">WP</a></li> <li><a href="#WW">WW</a></li> </ul> <li><a href="#Larry_Wall">Larry Wall</a></li> <li><a href="#Lexing">Lexing</a></li> <li><a href="#Literal">Literal</a></li> <li><a href="#LHS">LHS</a></li> <li><a href="#lvalue">lvalue</a></li> <li><a href="#Mainline">Mainline</a></li> <li><a href="#Mayspec">Mayspec</a></li> <li><a href="#MoarVM">MoarVM</a></li> <li><a href="#Multi-dispatch">Multi-dispatch</a></li> <li><a href="#multi-method">multi-method</a></li> <li><a href="#Née">Née</a></li> <li><a href="#NFG">NFG</a></li> <li><a href="#Niecza">Niecza</a></li> <li><a href="#Not_Quite_Perl">Not Quite Perl</a></li> <li><a href="#NQP">NQP</a></li> <li><a href="#NYI">NYI</a></li> <li><a href="#opcode">opcode</a></li> <li><a href="#Operator">Operator</a></li> <li><a href="#Parse_tree">Parse tree</a></li> <li><a href="#Parameter">Parameter</a></li> <li><a href="#Parrot">Parrot</a></li> <li><a href="#PAST">PAST</a></li> <li><a href="#Perl">Perl</a></li> <li><a href="#Perl_6">Perl 6</a></li> <li><a href="#PERL">PERL</a></li> <li><a href="#POD">POD</a></li> <li><a href="#POV">POV</a></li> <li><a href="#Propspec">Propspec</a></li> <li><a href="#Pull_request">Pull request</a></li> <li><a href="#priming">priming</a></li> <li><a href="#property">property</a></li> <li><a href="#pugs">pugs</a></li> <li><a href="#QAST">QAST</a></li> <li><a href="#Rakudo">Rakudo</a></li> <li><a href="#Reify">Reify</a></li> <li><a href="#Repository">Repository</a></li> <li><a href="#RHS">RHS</a></li> <li><a href="#roast">roast</a></li> <li><a href="#Roles">Roles</a></li> <li><a href="#rvalue">rvalue</a></li> <li><a href="#SAP">SAP</a></li> <li><a href="#Semilist">Semilist</a></li> <li><a href="#Sigil">Sigil</a></li> <li><a href="#Sigilless_variable">Sigilless variable</a></li> <li><a href="#Spesh">Spesh</a></li> <li><a href="#STD">STD</a></li> <li><a href="#Stub">Stub</a></li> <li><a href="#Symbol">Symbol</a></li> <li><a href="#Synopsis">Synopsis</a></li> <li><a href="#Syntax_analysis">Syntax analysis</a></li> <li><a href="#Test_suite">Test suite</a></li> <li><a href="#TheDamian">TheDamian</a></li> <li><a href="#TimToady">TimToady</a></li> <li><a href="#token">token</a></li> <li><a href="#Thunk">Thunk</a></li> <li><a href="#Tight_and_loose_precedence">Tight and loose precedence</a></li> <li><a href="#Truthy_and_Falsy">Truthy and Falsy</a></li> <li><a href="#twine">twine</a></li> <li><a href="#Type_objects">Type objects</a></li> <li><a href="#Type_smiley">Type smiley</a></li> <li><a href="#value">value</a></li> <li><a href="#UB">UB</a></li> <li><a href="#Value_type">Value type</a></li> <li><a href="#Variable">Variable</a></li> <li><a href="#Variable_interpolation">Variable interpolation</a></li> <li><a href="#Virtual_machine">Virtual machine</a></li> <ul> <li><a href="#WAT">WAT</a></li> </ul> <li><a href="#whitespace">whitespace</a></li> <li><a href="#6model">6model</a></li> </ul> </aside> <aside id="index-menu" class="menu is-hidden"> <ul class="menu-list"> <li>Language<ul> </ul></li> <li>Reference<ul> <li><a href="#index-entry-forward_declaration">forward declaration</a></li> </ul></li> </ul> </aside> </div> </div> </div> <div id="main-column" class="tile is-parent" style="overflow-x: hidden;"> <div id="main-col-inner"> <section class="raku page-header"> <div class="container px-4"> <div class="raku page-title has-text-centered"> Glossary </div> <div class="raku page-subtitle has-text-centered"> <p>Glossary of Raku terminology</p> </div> </div> </section> <section class="raku page-content"><div class="container px-4"><div class="columns one-col"> <h1 id="Abstract_class" class="raku-h1"><a name="index-entry-Abstract_Class-Abstract_class" data-indexedheader="Reference;Abstract Class"></a><a href="#Glossary" title="go to top of document">Abstract class<a class="raku-anchor" title="direct link" href="#Abstract_class">§</a></a></h1> <!-- defnmark Abstract_class 1 --> <p>The generic Computer Science term "abstract class" defines the <a href="#Interface">interface</a> or <a href="#API">API</a> of a class. In Raku, this is implemented using <a href="#Roles">roles</a> with <a href="#Stub">stubbed</a> methods.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">role</span> Canine { <span class="highlite-KEYWORD">method</span> bark { <span class="highlite-OPERATOR">...</span> } <span class="highlite-COMMENT"># the ... indicates a stub </span>} <span class="highlite-KEYWORD">class</span> Dog <span class="highlite-KEYWORD">does</span> Canine { <span class="highlite-KEYWORD">method</span> bark { <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">woof</span><span class="highlite-STRING_DELIMITER">"</span> } <span class="highlite-COMMENT"># *MUST* be implemented by class </span>}</pre> </div> </div> <h1 id="Advent_calendar" class="raku-h1"><a name="index-entry-Advent_Calendar-Advent_calendar" data-indexedheader="Reference;Advent Calendar"></a><a href="#Glossary" title="go to top of document">Advent calendar<a class="raku-anchor" title="direct link" href="#Advent_calendar">§</a></a></h1> <!-- defnmark Advent_calendar 1 --> <p>In the context of Raku, a yearly set of blog posts for each day from the 1st until the 25th of December, to be found at <a href="https://raku-advent.blog">https://raku-advent.blog</a>.</p> <h1 id="Adverb" class="raku-h1"><a name="index-entry-Adverb-Adverb" data-indexedheader="Language;Adverb"></a><a href="#Glossary" title="go to top of document">Adverb<a class="raku-anchor" title="direct link" href="#Adverb">§</a></a></h1> <!-- defnmark Adverb 1 --> <p>Generically, an adverb is a named argument to a function. There are also some specific syntax forms that allow adverbs to be tucked into some convenient places:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-STRING_DELIMITER">q:w</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo bar</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># ":w" is a Quotelike form modifier adverb </span><span class="highlite-REGEX_DELIMITER">m:g/</span><span class="highlite-REGEX_LITERAL">a</span><span class="highlite-REGEX_SPECIAL">|</span><span class="highlite-REGEX_LITERAL">b</span><span class="highlite-REGEX_SPECIAL">|</span><span class="highlite-REGEX_LITERAL">c</span><span class="highlite-REGEX_DELIMITER">/</span>; <span class="highlite-COMMENT"># ":g" is too </span><span class="highlite-NAME_ARRAY">@h</span>{3}:exists; <span class="highlite-COMMENT"># ":exists" is too, but is known as a subscript adverb </span></pre> </div> </div> <p>Adverbs are usually expressed with colon pair notation, and for this reason colon pair notation is also known as the adverbial pair form:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">:a(4) <span class="highlite-COMMENT"># Same as "a" => 4</span></pre> </div> </div> <p>Some other forms that use a colon in ways that have adverb-like semantics are called adverbial forms. One special form starts with an integer value, followed by a name (for the key):</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">:20seconds <span class="highlite-COMMENT"># same as seconds => 20</span></pre> </div> </div> <p>Also see <a href="#Colon_pair_and_colon_list">Colon pair and colon list</a>.</p> <h1 id="Adverbial_pair" class="raku-h1"><a name="index-entry-Adverbial_Pair-Adverbial_pair" data-indexedheader="Language;Adverbial Pair"></a><a href="#Glossary" title="go to top of document">Adverbial pair<a class="raku-anchor" title="direct link" href="#Adverbial_pair">§</a></a></h1> <!-- defnmark Adverbial_pair 1 --> <p>A generalized form of <code>pair notation</code>. They all start with the colon, as shown in the following examples:</p><table class="table is-bordered centered pod-table"> <thead> <tr><th>adverbial pair</th><th>pair notation</th></tr> </thead> <tbody> <tr><td>:foo<bar></td><td>foo => 'bar'</td></tr> <tr><td>:foo(42)</td><td>foo => 42</td></tr> <tr><td>:42foo</td><td>foo => 42</td></tr> <tr><td>:$foo</td><td>foo => $foo</td></tr> <tr><td>:foo</td><td>foo => True</td></tr> <tr><td>:!foo</td><td>foo => False</td></tr> </tbody> </table> <p>Also see <a href="#Adverb">Adverb</a> and <a href="#Colon_pair_and_colon_list">Colon pair and colon list</a>.</p> <h1 id="Allomorph" class="raku-h1"><a name="index-entry-Allomorph-Allomorph" data-indexedheader="Language;Allomorph"></a><a href="#Glossary" title="go to top of document">Allomorph<a class="raku-anchor" title="direct link" href="#Allomorph">§</a></a></h1> <!-- defnmark Allomorph 1 --> <p>A type that has two related values which may be used depending on the context. For example <a href="/type/IntStr"><code>IntStr</code></a> allomorph <code>is</code> both an <a href="/type/Int"><code>Int</code></a> and a <a href="/type/Str"><code>Str</code></a>, so it will be accepted by anything that expects an <a href="/type/Int"><code>Int</code></a>, a <a href="/type/Str"><code>Str</code></a>, or an <a href="/type/IntStr"><code>IntStr</code></a>. Keep in mind that certain constructs, such as <a href="/language/setbagmix">sets, bags, and mixes</a> care about object identity, and so will not accept an allomorph as equivalent of its components alone.</p><p>The <em>allomorph</em> types <a href="/type/IntStr"><code>IntStr</code></a>, <a href="/type/NumStr"><code>NumStr</code></a>, <a href="/type/RatStr"><code>RatStr</code></a> and <a href="/type/ComplexStr"><code>ComplexStr</code></a> may be created as a result of parsing a string quoted with angle brackets:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <42>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «IntStr» </span><span class="highlite-ROUTINE">say</span> <42.1e0>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «NumStr» </span><span class="highlite-ROUTINE">say</span> <42.1>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «RatStr»</span></pre> </div> </div> <p><strong>Note</strong>: angle brackets can also be used to create literals for which you'd normally need to use some operator (e.g. <code>/</code> for <a href="/type/Rat"><code>Rat</code></a> or <code>+</code> for <a href="/type/Complex"><code>Complex</code></a>). This allows you to use such literals in places where expressions are not allowed, for example, as literals in signatures:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-COMMENT"># Wrong, can't use an operator there: </span><span class="highlite-KEYWORD">multi</span> foo (1/3) { <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">It's one third!</span><span class="highlite-STRING_DELIMITER">"</span> } </pre> </div> </div> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-COMMENT"># Right, a Rat literal: </span><span class="highlite-KEYWORD">multi</span> foo (<span class="highlite-STRING_DELIMITER"><</span><span class="highlite-STRING">1/3</span><span class="highlite-STRING_DELIMITER">></span>) { <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">It's one third!</span><span class="highlite-STRING_DELIMITER">"</span> } </pre> </div> </div> <p>If you <em>do</em> want an allomorph and not a literal <a href="/type/Numeric"><code>Numeric</code></a>, then include whitespace around angle brackets:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <42/1>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «Rat» </span><span class="highlite-ROUTINE">say</span> <42+0i>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «Complex» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-OPERATOR"><</span> 42+0i <span class="highlite-OPERATOR">></span>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «ComplexStr» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-OPERATOR"><</span> 42/1 <span class="highlite-OPERATOR">></span>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «RatStr»</span></pre> </div> </div> <p>Please see <a href="/language/numerics#Allomorphs">the Numerics page</a> for a more complete description on how to work with these allomorphs.</p> <h1 id="Anonymous" class="raku-h1"><a name="index-entry-Anonymous-Anonymous" data-indexedheader="Reference;Anonymous"></a><a href="#Glossary" title="go to top of document">Anonymous<a class="raku-anchor" title="direct link" href="#Anonymous">§</a></a></h1> <!-- defnmark Anonymous 1 --> <p>A subroutine, method or submethod is called <em>anonymous</em> if it can't be called by name.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-COMMENT"># named subroutine </span><span class="highlite-KEYWORD">sub</span> double(<span class="highlite-NAME_SCALAR">$x</span>) { 2 <span class="highlite-OPERATOR">*</span> <span class="highlite-NAME_SCALAR">$x</span> }; <span class="highlite-COMMENT"># anonymous subroutine, stored in a named scalar </span><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$double</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-KEYWORD">sub</span> (<span class="highlite-NAME_SCALAR">$x</span>) { 2 <span class="highlite-OPERATOR">*</span> <span class="highlite-NAME_SCALAR">$x</span> };</pre> </div> </div> <p>Note that it is still allowed to have a name, but you cannot call it by that name:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-COMMENT"># anonymous, but knows its own name </span><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$s</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-KEYWORD">anon</span> <span class="highlite-KEYWORD">sub</span> triple(<span class="highlite-NAME_SCALAR">$x</span>) { 3 <span class="highlite-OPERATOR">*</span> <span class="highlite-NAME_SCALAR">$x</span> } <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$s</span>.<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «triple» </span></pre> </div> </div> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> triple(42); <span class="highlite-COMMENT"># OUTPUT: «Undeclared routine: triple» </span></pre> </div> </div> <h1 id="API" class="raku-h1"><a name="index-entry-API-API" data-indexedheader="Reference;API"></a><a href="#Glossary" title="go to top of document">API<a class="raku-anchor" title="direct link" href="#API">§</a></a></h1> <!-- defnmark API 1 --> <p>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 the implementation details.</p><p>See also <a href="#Abstract_class">abstract class</a>.</p> <h1 id="Apocalypse" class="raku-h1"><a name="index-entry-Apocalypse-Apocalypse" data-indexedheader="Reference;Apocalypse"></a><a href="#Glossary" title="go to top of document">Apocalypse<a class="raku-anchor" title="direct link" href="#Apocalypse">§</a></a></h1> <!-- defnmark Apocalypse 1 --> <p>A document originally written by <a href="#TimToady">TimToady</a>, in which he processed the initial barrage of RFCs that came out of the Perl community. Now only kept as a historical document for reference. See also <a href="#Exegesis">Exegesis</a> and <a href="#Synopsis">Synopsis</a>.</p> <h1 id="Arity" class="raku-h1"><a name="index-entry-Arity-Arity" data-indexedheader="Reference;Arity"></a><a href="#Glossary" title="go to top of document">Arity<a class="raku-anchor" title="direct link" href="#Arity">§</a></a></h1> <!-- defnmark Arity 1 --> <p>The number of <a href="/type/Positional"><code>Positional</code></a> operands expected by an <a href="#Operator">operator</a>, subroutine, method or callable block.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">sub</span> infix:<span class="highlite-STRING_DELIMITER"><</span><span class="highlite-STRING">+</span><span class="highlite-STRING_DELIMITER">></span>(Foo <span class="highlite-NAME_SCALAR">$a</span><span class="highlite-OPERATOR">,</span> Foo <span class="highlite-NAME_SCALAR">$b</span>) { <span class="highlite-NAME_SCALAR">$a</span>.<span class="highlite-TYPE">Int</span> <span class="highlite-OPERATOR">+</span> <span class="highlite-NAME_SCALAR">$b</span>.<span class="highlite-TYPE">Int</span> } <span class="highlite-COMMENT"># arity of "+" is 2 </span><span class="highlite-KEYWORD">sub</span> frobnicate(<span class="highlite-NAME_SCALAR">$x</span>) { <span class="highlite-OPERATOR">...</span> } <span class="highlite-COMMENT"># arity of 1 </span><span class="highlite-KEYWORD">sub</span> the-answer() { 42 } <span class="highlite-COMMENT"># arity of 0 </span><span class="highlite-KEYWORD">-></span> <span class="highlite-NAME_SCALAR">$key</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$value</span> { <span class="highlite-OPERATOR">...</span> } <span class="highlite-COMMENT"># arity of 2 </span></pre> </div> </div> <p>The arity of a <a href="/type/Callable"><code>Callable</code></a> is one of the main selectors in <a href="#Multi-dispatch">multi-dispatch</a>.</p> <h1 id="ASCII_operator" class="raku-h1"><a name="index-entry-ASCII_operator-Texas_operator-ASCII_operator" data-indexedheader="Language;ASCII operator"></a><a href="#Glossary" title="go to top of document">ASCII operator<a class="raku-anchor" title="direct link" href="#ASCII_operator">§</a></a></h1> <!-- defnmark ASCII_operator 1 --> <p>The ASCII variant of a non-ASCII Unicode <a href="#Operator">operator</a> or <a href="#Symbol">symbol</a>. For instance, <code>(elem)</code> corresponds to the <code>∈</code> ("Is this an element of that set?") operator that comes from set theory. ASCII operators are a workaround to the problem that people don't know how to type Unicode yet. Culturally, while we encourage people to use the Unicode symbols in a vague sort of way, we do not disparage the use of the <a href="/language/unicode_ascii">ASCII variants</a>. Well, maybe just a little...</p> <h1 id="Autothreading" class="raku-h1"><a name="index-entry-Autothreading-Autothreading" data-indexedheader="Language;Autothreading"></a><a href="#Glossary" title="go to top of document">Autothreading<a class="raku-anchor" title="direct link" href="#Autothreading">§</a></a></h1> <!-- defnmark Autothreading 1 --> <p>Autothreading is what happens if you pass a <a href="/type/Junction"><code>Junction</code></a> to a subroutine that expects a parameter of type <a href="/type/Any"><code>Any</code></a> or a subtype thereof (such as anything <a href="/type/Cool"><code>Cool</code></a>). The call is then executed for each value of the junction. The result of these calls is assembled in a new junction of the same type as the original junction.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">sub</span> <span class="highlite-ROUTINE">f</span>(<span class="highlite-NAME_SCALAR">$x</span>) { 2 <span class="highlite-OPERATOR">*</span> <span class="highlite-NAME_SCALAR">$x</span> }; <span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">f</span>(1|2|3) <span class="highlite-OPERATOR">==</span> 4; <span class="highlite-COMMENT"># OUTPUT: «any(False, True, False)»</span></pre> </div> </div> <p>Here <code>f()</code> is a sub with one parameter, and since it has no explicit type, it is implicitly typed as <a href="/type/Any"><code>Any</code></a>. The <a href="/type/Junction"><code>Junction</code></a> argument causes the <code>f(1|2|3)</code> call to be internally executed as <code>f(1)|f(2)|f(3)</code>, and the resulting junction is <code>2|4|6</code>. These are then all compared to <code>4</code>, resulting in a junction <code>False|True|False</code>. This process of separating junction arguments into multiple calls to a function is called <em>autothreading</em>.</p><p>If you use the resulting junction in a Boolean context, such as with an <code>if</code>, it collapses into a single Boolean which is <code>True</code> if any of the values in the junction are True.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">if</span> <span class="highlite-ROUTINE">f</span>(1|2|3) <span class="highlite-OPERATOR">==</span> 4 { <span class="highlite-COMMENT"># fires because f(2) == 4 is true </span> <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">success</span><span class="highlite-STRING_DELIMITER">'</span>; } </pre> </div> </div> <h1 id="Backtracking" class="raku-h1"><a name="index-entry-Backtracking-Backtracking" data-indexedheader="Reference;Backtracking"></a><a href="#Glossary" title="go to top of document">Backtracking<a class="raku-anchor" title="direct link" href="#Backtracking">§</a></a></h1> <!-- defnmark Backtracking 1 --> <p>Backtracking is the default way a regexp is matched. The engine is allowed to explore several ways moving backward in the string characters in order to allow every piece of a regexp to match something. For more information, see <a href="/language/regexes#Backtracking">Regexp Backtracking section</a>.</p> <h1 id="binder" class="raku-h1"><a name="index-entry-binder-binder" data-indexedheader="Reference;binder"></a><a href="#Glossary" title="go to top of document">binder<a class="raku-anchor" title="direct link" href="#binder">§</a></a></h1> <!-- defnmark binder 1 --> <p>When you pass an argument list to a function (or any other callable, like a method or a block), the argument list gets bound to the parameters in the signature. The code that does this is called the <em>binder</em>.</p> <h1 id="block" class="raku-h1"><a name="index-entry-block-block" data-indexedheader="Reference;block"></a><a href="#Glossary" title="go to top of document">block<a class="raku-anchor" title="direct link" href="#block">§</a></a></h1> <!-- defnmark block 1 --> <p><a href="/type/Block">Blocks</a> are code object with its own lexical scope, which allows them to define variables without interfering with other in the containing block.</p> <h1 id="bytecode" class="raku-h1"><a name="index-entry-bytecode-bytecode" data-indexedheader="Reference;bytecode"></a><a href="#Glossary" title="go to top of document">bytecode<a class="raku-anchor" title="direct link" href="#bytecode">§</a></a></h1> <!-- defnmark bytecode 1 --> <p>Although Raku looks like an interpreted language, since it uses the <code>#!</code> form to run its scripts (and they are called <em>scripts</em>), it is actually <a href="https://www.reddit.com/r/perl6/comments/42dkme/perl6_not_being_an_interpreted_language/">compiled to run in a virtual machine</a> so the compiler (currently Rakudo) generates <a href="https://en.wikipedia.org/wiki/Bytecode">bytecode</a> that runs either in MoarVM or the Java Virtual Machine, the two VMs currently supported.</p> <h1 id="Camelia" class="raku-h1"><a name="index-entry-Camelia-Camelia" data-indexedheader="Reference;Camelia"></a><a href="#Glossary" title="go to top of document">Camelia<a class="raku-anchor" title="direct link" href="#Camelia">§</a></a></h1> <!-- defnmark Camelia 1 --> <p>A butterfly image intended primarily to represent Raku, The Language.</p> <h1 id="Colon_pair_and_colon_list" class="raku-h1"><a name="index-entry-Colon_Pair-Colon_List-Colon_pair_and_colon_list" data-indexedheader="Reference;Colon Pair"></a><a href="#Glossary" title="go to top of document">Colon pair and colon list<a class="raku-anchor" title="direct link" href="#Colon_pair_and_colon_list">§</a></a></h1> <!-- defnmark Colon_pair_and_colon_list 1 --> <p>A colon pair is a shorthand syntax used to create or visually present a <a href="/type/Pair"><code>Pair</code></a> object. The two most common forms are:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">:a(4) <span class="highlite-COMMENT"># Same as "a" => 4, same as Pair.new("a", 4) </span>:a<4> <span class="highlite-COMMENT"># Same as "a" => "4", same as Pair.new("a", val("4"))</span></pre> </div> </div> <p>This is also known as the adverbial pair form.</p><p><strong>Note</strong>: when the part after the colon and before the balanced delimiters is not a legal identifier, other semantics apply, not all of which produce <a href="/type/Pair"><code>Pair</code></a> objects.</p><p>Two other common forms are:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">:a <span class="highlite-COMMENT"># Same as :a(True) </span><span class="highlite-OPERATOR">:</span>!a <span class="highlite-COMMENT"># Same as :a(False)</span></pre> </div> </div> <p>A colon list just means that a list that contains only colon pairs, does not need commas, or even spaces:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">:a(4):c:!d:c <span class="highlite-COMMENT"># Same as a => 4, c => True, d => False, c => True</span></pre> </div> </div> <p>Finally, if there is a variable with the same name as an intended adverbial pair, you don't have to specify the name twice, but just specify the adverb with the appropriate sigil:</p><table class="table is-bordered centered pod-table"> <thead> <tr><th>variable only</th><th>same as</th></tr> </thead> <tbody> <tr><td>:$foo</td><td>foo => $foo</td></tr> <tr><td>:@bar</td><td>bar => @bar</td></tr> <tr><td>:%mapper</td><td>mapper => %mapper</td></tr> <tr><td>:&test</td><td>test => &test</td></tr> </tbody> </table> <p>See also <a href="#Adverb">Adverb</a>.</p> <h1 id="Community" class="raku-h1"><a name="index-entry-Community-Community" data-indexedheader="Reference;Community"></a><a href="#Glossary" title="go to top of document">Community<a class="raku-anchor" title="direct link" href="#Community">§</a></a></h1> <!-- defnmark Community 1 --> <p>See <a href="https://raku.org/community/">https://raku.org/community/</a> for information about how to participate in the friendly Raku community.</p> <h1 id="Damian_Conway" class="raku-h1"><a name="index-entry-Damian_Conway-Damian_Conway" data-indexedheader="Reference;Damian Conway"></a><a href="#Glossary" title="go to top of document">Damian Conway<a class="raku-anchor" title="direct link" href="#Damian_Conway">§</a></a></h1> <!-- defnmark Damian_Conway 1 --> <p>Original author of the <a href="#Exegesis">Exegesis</a> (among many other things). See also <a href="https://en.wikipedia.org/wiki/Damian_Conway">https://en.wikipedia.org/wiki/Damian_Conway</a>.</p> <h1 id="decont" class="raku-h1"><a name="index-entry-decont-decont" data-indexedheader="Reference;decont"></a><a href="#Glossary" title="go to top of document">decont<a class="raku-anchor" title="direct link" href="#decont">§</a></a></h1> <!-- defnmark decont 1 --> <p>Short for "decontainerize", meaning to remove an item <a href="/language/containers">from its <code>Scalar</code> container</a>, often to obtain <a href="https://perl6advent.wordpress.com/2017/12/02/#theoneandonly">a different behavior</a> for items that have it.</p> <h1 id="diffy" class="raku-h1"><a name="index-entry-diffy-diffy" data-indexedheader="Reference;diffy"></a><a href="#Glossary" title="go to top of document">diffy<a class="raku-anchor" title="direct link" href="#diffy">§</a></a></h1> <!-- defnmark diffy 1 --> <p>See <a href="#Operator">operator</a>. It means the type of the operator result is sufficiently different from its arguments that op= makes little sense.</p> <h1 id="Exegesis" class="raku-h1"><a name="index-entry-Exegesis-Exegesis" data-indexedheader="Reference;Exegesis"></a><a href="#Glossary" title="go to top of document">Exegesis<a class="raku-anchor" title="direct link" href="#Exegesis">§</a></a></h1> <!-- defnmark Exegesis 1 --> <p>A document originally written by <a href="#TheDamian">TheDamian</a>, in which he tried to explain the <a href="#Apocalypse">Apocalypses</a> to the common (wo)man. Now only kept as a historical document for reference. See also <a href="#Synopsis">Synopsis</a>.</p><p><a name="index-entry-forward_declaration" class="index-entry"></a></p> <h1 id="Forward_declarations" class="raku-h1"><a href="#Glossary" title="go to top of document">Forward declarations<a class="raku-anchor" title="direct link" href="#Forward_declarations">§</a></a></h1> <p>Declare the scope and/or type of a functional entity (class or routine) without actually declaring its code by using the <a href="/language/operators#listop_...">"stub" operator</a>; code will be declared later on in the same file.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">grammar</span> Quux { <span class="highlite-KEYWORD">my</span> <span class="highlite-KEYWORD">regex</span> future <span class="highlite-REGEX_DELIMITER">{</span><span class="highlite-REGEX_SPECIAL">...</span><span class="highlite-REGEX_DELIMITER">}</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foobarbaz</span><span class="highlite-STRING_DELIMITER">"</span> <span class="highlite-OPERATOR">~~</span> <span class="highlite-OPERATOR">/</span><future><span class="highlite-OPERATOR">/</span>; <span class="highlite-KEYWORD">regex</span> future <span class="highlite-REGEX_DELIMITER">{</span><span class="highlite-REGEX_SPECIAL"> </span><span class="highlite-REGEX_LITERAL">f</span><span class="highlite-REGEX_SPECIAL"> \w** </span><span class="highlite-REGEX_LITERAL">2</span><span class="highlite-REGEX_SPECIAL"> </span><span class="highlite-REGEX_LITERAL">b</span><span class="highlite-REGEX_SPECIAL"> \w ** </span><span class="highlite-REGEX_LITERAL">2</span><span class="highlite-REGEX_SPECIAL"> </span><span class="highlite-REGEX_DELIMITER">}</span> } </pre> </div> </div> <p>In this case, the regex acts as a method; please note that the scope is only declared once.</p> <h1 id="fiddly" class="raku-h1"><a name="index-entry-fiddly-fiddly" data-indexedheader="Reference;fiddly"></a><a href="#Glossary" title="go to top of document">fiddly<a class="raku-anchor" title="direct link" href="#fiddly">§</a></a></h1> <!-- defnmark fiddly 1 --> <p>Too complicated to apply a metaop to. See <a href="#Operator">operator</a>.</p> <h1 id="Handle" class="raku-h1"><a name="index-entry-Handle-Handle" data-indexedheader="Reference;Handle"></a><a href="#Glossary" title="go to top of document">Handle<a class="raku-anchor" title="direct link" href="#Handle">§</a></a></h1> <!-- defnmark Handle 1 --> <p>A handle is a data structure used to store information about some input/output operation such as file or socket reading or writing. Raku uses <a href="/type/IO/Handle"><code>IO::Handle</code></a> as a base class for filehandles, and <a href="/type/IO/Socket"><code>IO::Socket</code></a> for sockets.</p> <h1 id="Huffmanize" class="raku-h1"><a name="index-entry-Huffmanize-Huffmanize" data-indexedheader="Reference;Huffmanize"></a><a href="#Glossary" title="go to top of document">Huffmanize<a class="raku-anchor" title="direct link" href="#Huffmanize">§</a></a></h1> <!-- defnmark Huffmanize 1 --> <p>With reference to <a href="https://en.wikipedia.org/wiki/Huffman_coding">Huffman coding</a>, "huffmanizing" is making things that are commonly used easier, and often shorter, to type. With things that are used less frequently it's both less of a bother to type longer pieces of code and often longer, more descriptive naming is necessary to easily be reminded of what the rarely-used feature does.</p><p>For example, printing output is a common task, while performing thread-safe atomic addition on native atomicity-safe integers is much less so. There's a need to "huffmanize" the task printing and that's why you can do it by just typing three letters <a href="/routine/put">put</a>. But there's no need to "huffmanize" the rarely-needed atomic operators, which is why you type the lengthier names, such as <a href="/routine/atomic-inc-fetch">atomic-inc-fetch</a>. The name <a href="/routine/put">put</a> is a bit vague, but because it's commonly used, it's easy to learn what it does. On the other hand, the name <a href="/routine/atomic-inc-fetch">atomic-inc-fetch</a> is rarer, and the more descriptive name helps recall its purpose better.</p> <h1 id="iffy" class="raku-h1"><a name="index-entry-iffy-iffy" data-indexedheader="Reference;iffy"></a><a href="#Glossary" title="go to top of document">iffy<a class="raku-anchor" title="direct link" href="#iffy">§</a></a></h1> <!-- defnmark iffy 1 --> <p>Often used as a Boolean value. See <a href="#Operator">operator</a>. Made via the <a href="/language/modules#use"><code>use</code> keyword</a>.</p> <h1 id="import" class="raku-h1"><a name="index-entry-import-import" data-indexedheader="Reference;import"></a><a href="#Glossary" title="go to top of document">import<a class="raku-anchor" title="direct link" href="#import">§</a></a></h1> <!-- defnmark import 1 --> <p>Include functions from a module in the current namespace.</p> <h1 id="infix_stopper" class="raku-h1"><a name="index-entry-infix-infix_stopper" data-indexedheader="Reference;infix"></a><a href="#Glossary" title="go to top of document">infix stopper<a class="raku-anchor" title="direct link" href="#infix_stopper">§</a></a></h1> <!-- defnmark infix_stopper 1 --> <p>An <em>infix stopper</em> is something that tells us the grammar not try to parse an infix at that point. Consider say <code>"abc42def" ~~ m|\d+|</code>. Ordinarily, a <code>|</code> in a regex is treated as an alternation, but since the infix stopper matches the current regex terminator, we don't continue and try to parse an infix at that point. The <code>|</code> is thus treated as the end of the regex.</p> <h1 id="Instance" class="raku-h1"><a name="index-entry-instance-Instance" data-indexedheader="Reference;instance"></a><a href="#Glossary" title="go to top of document">Instance<a class="raku-anchor" title="direct link" href="#Instance">§</a></a></h1> <!-- defnmark Instance 1 --> <p>An <em>instance</em> of a class is also called an <em>object</em> in some other programming languages. It has storage for attributes and is often the return value of a call to a method called <code>new</code>, or a literal.</p><p>Instances of most types are defined to be <code>True</code> e.g., <code>defined($instance)</code> is <code>True</code>.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-TYPE">Str</span> <span class="highlite-NAME_SCALAR">$str</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">hello</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT">## this is with built-in types, e.g. Str </span><span class="highlite-KEYWORD">if</span> <span class="highlite-ROUTINE">defined</span>(<span class="highlite-NAME_SCALAR">$str</span>) { <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Oh, yeah. I'm defined.</span><span class="highlite-STRING_DELIMITER">"</span>; } <span class="highlite-KEYWORD">else</span> { <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">No. Something off? </span><span class="highlite-STRING_DELIMITER">"</span>; } <span class="highlite-COMMENT">## if you wanted objects... </span><span class="highlite-KEYWORD">class</span> A { <span class="highlite-COMMENT"># nothing here for now. </span>} <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$an_instance</span> <span class="highlite-OPERATOR">=</span> A.<span class="highlite-ROUTINE">new</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$an_instance</span>.<span class="highlite-ROUTINE">defined</span>.<span class="highlite-ROUTINE">raku</span>;<span class="highlite-COMMENT"># defined($an_instance) works too.</span></pre> </div> </div> <p>To put things another way, a class contains the blueprints of methods and attributes, and an instance carries it into the real world.</p> <h1 id="Interface" class="raku-h1"><a name="index-entry-Interface-Interface" data-indexedheader="Reference;Interface"></a><a href="#Glossary" title="go to top of document">Interface<a class="raku-anchor" title="direct link" href="#Interface">§</a></a></h1> <!-- defnmark Interface 1 --> <p>An interface is an <a href="#Abstract_class">abstract class</a>.</p> <h1 id="Invocant" class="raku-h1"><a name="index-entry-Invocant-Invocant" data-indexedheader="Reference;Invocant"></a><a href="#Glossary" title="go to top of document">Invocant<a class="raku-anchor" title="direct link" href="#Invocant">§</a></a></h1> <!-- defnmark Invocant 1 --> <p>Caller, <em>the one who calls or invokes</em>. The invocant of a method would be the object on which that method is being called, or, in some cases, the class itself. <em>Invocant</em> is used instead of caller because the latter refers to the <em>scope</em>.</p> <h1 id="IRC" class="raku-h1"><a name="index-entry-IRC-IRC" data-indexedheader="Reference;IRC"></a><a href="#Glossary" title="go to top of document">IRC<a class="raku-anchor" title="direct link" href="#IRC">§</a></a></h1> <!-- defnmark IRC 1 --> <p>Internet Relay Chat. Raku developers and users usually hang out on the <code>#raku</code> channel of <code>irc.libera.chat</code>. This channel is also populated by a host of friendly bots that allow you to interact with Raku and its codebase, as well as send delayed messages and other goodies. Check the full list in <a href="https://raku.org/community/irc">the community page of raku.org</a>.</p> <h1 id="IRC_lingo" class="raku-h1"><a name="index-entry-IRC_lingo-IRC_lingo" data-indexedheader="Reference;IRC lingo"></a><a href="#Glossary" title="go to top of document">IRC lingo<a class="raku-anchor" title="direct link" href="#IRC_lingo">§</a></a></h1> <!-- defnmark IRC_lingo 1 --> <p>The following terms are often used on the Raku related <a href="#IRC">IRC</a> channels:</p> <h2 id="ALAP" class="raku-h2"><a name="index-entry-ALAP-ALAP" data-indexedheader="Reference;ALAP"></a><a href="#Glossary" title="go to top of document">ALAP<a class="raku-anchor" title="direct link" href="#ALAP">§</a></a></h2> <!-- defnmark ALAP 2 --> <p>As Late As Possible</p> <h2 id="autopun" class="raku-h2"><a name="index-entry-autopun-autopun" data-indexedheader="Reference;autopun"></a><a href="#Glossary" title="go to top of document">autopun<a class="raku-anchor" title="direct link" href="#autopun">§</a></a></h2> <!-- defnmark autopun 2 --> <p>A self-referencing pun, e.g. "Are you ignorant or apathetic?" - "I don't know, and I don't care."</p> <h2 id="backlog" class="raku-h2"><a name="index-entry-backlog-backlog" data-indexedheader="Reference;backlog"></a><a href="#Glossary" title="go to top of document">backlog<a class="raku-anchor" title="direct link" href="#backlog">§</a></a></h2> <!-- defnmark backlog 2 --> <p>That part of a discussion on an <a href="#IRC">IRC</a> channel that you've missed. If it is not or no longer available in your IRC client, you can go to sites such as <a href="https://irclogs.raku.org">https://irclogs.raku.org</a> to see what has been logged for you.</p> <h2 id="Bot" class="raku-h2"><a name="index-entry-Bot-Bot" data-indexedheader="Reference;Bot"></a><a href="#Glossary" title="go to top of document">Bot<a class="raku-anchor" title="direct link" href="#Bot">§</a></a></h2> <!-- defnmark Bot 2 --> <p>A program that does automatic tasks on one or more <a href="#IRC">IRC</a> channels by acting like a regular user (as far as the IRC server is concerned) and performing some tasks that may involve answering to users requests. Examples can be found <a href="https://raku.org/community/irc">on the IRC page of raku.org</a>.</p> <h2 id="Compilation_unit_or_compunit" class="raku-h2"><a name="index-entry-compunit_(glossary)-compilation_unit-Compilation_unit_or_<em>compunit</em>" data-indexedheader="Reference;compunit (glossary)"></a><a href="#Glossary" title="go to top of document">Compilation unit or <em>compunit</em><a class="raku-anchor" title="direct link" href="#Compilation_unit_or_compunit">§</a></a></h2> <!-- defnmark Compilation_unit_or_compunit 2 --> <p>A <a href="https://github.com/rakudo/rakudo/blob/master/docs/module_management.md">compunit</a> is a piece of Raku code that is analyzed and compiled as a single unit. Typically, this piece of code will be contained in a single file, but code inside an <a href="/routine/EVAL">EVAL</a> is also considered a compunit.</p> <h2 id="DWIM" class="raku-h2"><a name="index-entry-DWIM-DWIM" data-indexedheader="Reference;DWIM"></a><a href="#Glossary" title="go to top of document">DWIM<a class="raku-anchor" title="direct link" href="#DWIM">§</a></a></h2> <!-- defnmark DWIM 2 --> <p><em>Do What I Mean</em>. A programming language designer motto. The opposite of a DWIM is a <a href="#WAT">WAT</a>.</p> <h2 id="flap" class="raku-h2"><a name="index-entry-flap-flap" data-indexedheader="Reference;flap"></a><a href="#Glossary" title="go to top of document">flap<a class="raku-anchor" title="direct link" href="#flap">§</a></a></h2> <!-- defnmark flap 2 --> <p>Sometimes a test will fail under some conditions, but not others; when this test passes in some test runs and fails in others, it's called flapping.</p> <h2 id="fossil" class="raku-h2"><a name="index-entry-fossil-fossil" data-indexedheader="Reference;fossil"></a><a href="#Glossary" title="go to top of document">fossil<a class="raku-anchor" title="direct link" href="#fossil">§</a></a></h2> <!-- defnmark fossil 2 --> <p>Something in a generally current document that is no longer true but which has not yet been fixed by correcting or removing it.</p> <h2 id="FSVO" class="raku-h2"><a name="index-entry-FSVO-FSVO" data-indexedheader="Reference;FSVO"></a><a href="#Glossary" title="go to top of document">FSVO<a class="raku-anchor" title="direct link" href="#FSVO">§</a></a></h2> <!-- defnmark FSVO 2 --> <p>For Some Value Of...</p> <h2 id="FTFY" class="raku-h2"><a name="index-entry-FTFY-FTFY" data-indexedheader="Reference;FTFY"></a><a href="#Glossary" title="go to top of document">FTFY<a class="raku-anchor" title="direct link" href="#FTFY">§</a></a></h2> <!-- defnmark FTFY 2 --> <p>Fixed That For You</p> <h2 id="gradual_typing" class="raku-h2"><a name="index-entry-gradual_typing-gradual_typing" data-indexedheader="Reference;gradual typing"></a><a href="#Glossary" title="go to top of document">gradual typing<a class="raku-anchor" title="direct link" href="#gradual_typing">§</a></a></h2> <!-- defnmark gradual_typing 2 --> <p>You don't have to specify types of variables and parameters, but if you do, it helps in early determination of impossible dispatches and better optimization. See also <a href="https://en.wikipedia.org/wiki/Gradual_typing">https://en.wikipedia.org/wiki/Gradual_typing</a>.</p> <h2 id="IIRC" class="raku-h2"><a name="index-entry-IIRC-IIRC" data-indexedheader="Reference;IIRC"></a><a href="#Glossary" title="go to top of document">IIRC<a class="raku-anchor" title="direct link" href="#IIRC">§</a></a></h2> <!-- defnmark IIRC 2 --> <p>If I Read (or Remember) Correctly.</p> <h2 id="IMHO" class="raku-h2"><a name="index-entry-IMHO-IMHO" data-indexedheader="Reference;IMHO"></a><a href="#Glossary" title="go to top of document">IMHO<a class="raku-anchor" title="direct link" href="#IMHO">§</a></a></h2> <!-- defnmark IMHO 2 --> <p>In My Humble Opinion.</p> <h2 id="IWBN" class="raku-h2"><a name="index-entry-IWBN-IWBN" data-indexedheader="Reference;IWBN"></a><a href="#Glossary" title="go to top of document">IWBN<a class="raku-anchor" title="direct link" href="#IWBN">§</a></a></h2> <!-- defnmark IWBN 2 --> <p>It Would Be Nice</p> <h2 id="LHF" class="raku-h2"><a name="index-entry-LHF-LHF" data-indexedheader="Reference;LHF"></a><a href="#Glossary" title="go to top of document">LHF<a class="raku-anchor" title="direct link" href="#LHF">§</a></a></h2> <!-- defnmark LHF 2 --> <p>Low Hanging Fruit. Usually used in the context of a (relatively) simple task to be performed by a (relative) newbie.</p> <h2 id="LGTM" class="raku-h2"><a name="index-entry-LGTM-LGTM" data-indexedheader="Reference;LGTM"></a><a href="#Glossary" title="go to top of document">LGTM<a class="raku-anchor" title="direct link" href="#LGTM">§</a></a></h2> <!-- defnmark LGTM 2 --> <p>Looks Good To Me</p> <h2 id="LTA" class="raku-h2"><a name="index-entry-LTA-LTA" data-indexedheader="Reference;LTA"></a><a href="#Glossary" title="go to top of document">LTA<a class="raku-anchor" title="direct link" href="#LTA">§</a></a></h2> <!-- defnmark LTA 2 --> <p>Less Than Awesome. Usually used in the context of an error message that is rather non-descriptive or unrelated to the actual error.</p> <h2 id="NST" class="raku-h2"><a name="index-entry-NST-NST" data-indexedheader="Reference;NST"></a><a href="#Glossary" title="go to top of document">NST<a class="raku-anchor" title="direct link" href="#NST">§</a></a></h2> <!-- defnmark NST 2 --> <p>No Such Thing</p> <h2 id="Opt" class="raku-h2"><a name="index-entry-Opt-Opt" data-indexedheader="Reference;Opt"></a><a href="#Glossary" title="go to top of document">Opt<a class="raku-anchor" title="direct link" href="#Opt">§</a></a></h2> <!-- defnmark Opt 2 --> <p>Short for "optimization", usually in either the context of <a href="#Spesh">spesh</a> or JIT.</p> <h2 id="PB" class="raku-h2"><a name="index-entry-PB-PB" data-indexedheader="Reference;PB"></a><a href="#Glossary" title="go to top of document">PB<a class="raku-anchor" title="direct link" href="#PB">§</a></a></h2> <!-- defnmark PB 2 --> <p>Short for "problem". As in "that's not the pb".</p> <h2 id="PR" class="raku-h2"><a name="index-entry-PR-PR" data-indexedheader="Reference;PR"></a><a href="#Glossary" title="go to top of document">PR<a class="raku-anchor" title="direct link" href="#PR">§</a></a></h2> <!-- defnmark PR 2 --> <p>See <a href="#Pull_request">Pull request</a>.</p> <h2 id="P5" class="raku-h2"><a name="index-entry-P5-P5" data-indexedheader="Reference;P5"></a><a href="#Glossary" title="go to top of document">P5<a class="raku-anchor" title="direct link" href="#P5">§</a></a></h2> <!-- defnmark P5 2 --> <p>Perl 5</p> <h2 id="P6" class="raku-h2"><a name="index-entry-P6-P6" data-indexedheader="Reference;P6"></a><a href="#Glossary" title="go to top of document">P6<a class="raku-anchor" title="direct link" href="#P6">§</a></a></h2> <!-- defnmark P6 2 --> <p>Raku (née Perl 6)</p> <h2 id="RSN" class="raku-h2"><a name="index-entry-RSN-RSN" data-indexedheader="Reference;RSN"></a><a href="#Glossary" title="go to top of document">RSN<a class="raku-anchor" title="direct link" href="#RSN">§</a></a></h2> <!-- defnmark RSN 2 --> <p>Real Soon Now.</p> <h2 id="RT" class="raku-h2"><a name="index-entry-RT-RT" data-indexedheader="Reference;RT"></a><a href="#Glossary" title="go to top of document">RT<a class="raku-anchor" title="direct link" href="#RT">§</a></a></h2> <!-- defnmark RT 2 --> <p>Request Tracker (<a href="https://rt.perl.org/">https://rt.perl.org/</a>). The place where all the bugs related to <a href="#Rakudo">Rakudo</a> used to live. Nowadays, the Github issue tracker of the rakudo/rakudo repository is used for that.</p> <h2 id="TIMTOWTDI" class="raku-h2"><a name="index-entry-TIMTOWTDI-TIMTOWTDI" data-indexedheader="Reference;TIMTOWTDI"></a><a href="#Glossary" title="go to top of document">TIMTOWTDI<a class="raku-anchor" title="direct link" href="#TIMTOWTDI">§</a></a></h2> <!-- defnmark TIMTOWTDI 2 --> <p>An alternative form of <a href="#TMTOWTDI">TIMTOWTDI</a>, explicitly including the "is" from the contraction "There's".</p> <h2 id="TMI" class="raku-h2"><a name="index-entry-TMI-TMI" data-indexedheader="Reference;TMI"></a><a href="#Glossary" title="go to top of document">TMI<a class="raku-anchor" title="direct link" href="#TMI">§</a></a></h2> <!-- defnmark TMI 2 --> <p>Too Much Information.</p> <h2 id="TMTOWTDI" class="raku-h2"><a name="index-entry-TMTOWTDI-TMTOWTDI" data-indexedheader="Reference;TMTOWTDI"></a><a href="#Glossary" title="go to top of document">TMTOWTDI<a class="raku-anchor" title="direct link" href="#TMTOWTDI">§</a></a></h2> <!-- defnmark TMTOWTDI 2 --> <p>"There's More Than One Way To Do It", the Perl motto.</p> <h2 id="UGT" class="raku-h2"><a name="index-entry-UGT-UGT" data-indexedheader="Reference;UGT"></a><a href="#Glossary" title="go to top of document">UGT<a class="raku-anchor" title="direct link" href="#UGT">§</a></a></h2> <!-- defnmark UGT 2 --> <p>"Universal Greeting Time" - i.e., it's always "morning".</p> <h2 id="WFM" class="raku-h2"><a name="index-entry-WFM-WFM" data-indexedheader="Reference;WFM"></a><a href="#Glossary" title="go to top of document">WFM<a class="raku-anchor" title="direct link" href="#WFM">§</a></a></h2> <!-- defnmark WFM 2 --> <p>Works For Me</p> <h2 id="WIP" class="raku-h2"><a name="index-entry-WIP-WIP" data-indexedheader="Reference;WIP"></a><a href="#Glossary" title="go to top of document">WIP<a class="raku-anchor" title="direct link" href="#WIP">§</a></a></h2> <!-- defnmark WIP 2 --> <p>Work In Progress</p> <h2 id="WP" class="raku-h2"><a name="index-entry-WP-WP" data-indexedheader="Reference;WP"></a><a href="#Glossary" title="go to top of document">WP<a class="raku-anchor" title="direct link" href="#WP">§</a></a></h2> <!-- defnmark WP 2 --> <p>Wikipedia</p> <h2 id="WW" class="raku-h2"><a name="index-entry-WW-WW" data-indexedheader="Reference;WW"></a><a href="#Glossary" title="go to top of document">WW<a class="raku-anchor" title="direct link" href="#WW">§</a></a></h2> <!-- defnmark WW 2 --> <p>Short for <code>wrong window</code>. When on <a href="#IRC">IRC</a>, someone types something in a channel that was intended for another channel, or for a private message.</p> <h1 id="Larry_Wall" class="raku-h1"><a name="index-entry-Larry_Wall-Larry_Wall" data-indexedheader="Reference;Larry Wall"></a><a href="#Glossary" title="go to top of document">Larry Wall<a class="raku-anchor" title="direct link" href="#Larry_Wall">§</a></a></h1> <!-- defnmark Larry_Wall 1 --> <p><a href="#Perl">Perl's</a> benevolent dictator for life, among many other things. See also <a href="https://en.wikipedia.org/wiki/Larry_Wall">https://en.wikipedia.org/wiki/Larry_Wall</a>.</p> <h1 id="Lexing" class="raku-h1"><a name="index-entry-Lexing-Lexing" data-indexedheader="Reference;Lexing"></a><a href="#Glossary" title="go to top of document">Lexing<a class="raku-anchor" title="direct link" href="#Lexing">§</a></a></h1> <!-- defnmark Lexing 1 --> <p>Performing <a href="https://en.wikipedia.org/wiki/Lexical_analysis">lexical analysis</a>, a step which usually precedes parsing.</p> <h1 id="Literal" class="raku-h1"><a name="index-entry-Literal-Literal" data-indexedheader="Reference;Literal"></a><a href="#Glossary" title="go to top of document">Literal<a class="raku-anchor" title="direct link" href="#Literal">§</a></a></h1> <!-- defnmark Literal 1 --> <p>A <em>literal</em> is a piece of code that directly stands for an (often built-in) object and also refers to the object itself.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$x</span> <span class="highlite-OPERATOR">=</span> 2; <span class="highlite-COMMENT"># the 2 is a literal </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$x</span>; <span class="highlite-COMMENT"># $x is not a literal, but a variable </span><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$s</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Foo</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># the "Foo" is a literal, the $s is a variable</span></pre> </div> </div> <p>Different types of literals are described in <a href="/language/syntax#Literals">the syntax document</a>.</p> <h1 id="LHS" class="raku-h1"><a name="index-entry-LHS-LHS" data-indexedheader="Reference;LHS"></a><a href="#Glossary" title="go to top of document">LHS<a class="raku-anchor" title="direct link" href="#LHS">§</a></a></h1> <!-- defnmark LHS 1 --> <p>As an acronym left-hand side, it usually refers to the left hand side of an expression, and more specifically to the left-hand side of expressions such as <code>$lhs = "this would be the right-hand side"</code>. Since the left hand side of these expressions modify their value, when something behaves as a LHS it means that it can be read and written to.</p> <h1 id="lvalue" class="raku-h1"><a name="index-entry-lvalue-lvalue" data-indexedheader="Reference;lvalue"></a><a href="#Glossary" title="go to top of document">lvalue<a class="raku-anchor" title="direct link" href="#lvalue">§</a></a></h1> <!-- defnmark lvalue 1 --> <p>An <em>lvalue</em>, or a <em>left value</em>, is anything that can appear on the left-hand side of the assignment operator <code>=</code>. It is anything you can assign to.</p><p>Typical lvalues are variables, private and <code>is rw</code> attributes, lists of variables and lvalue subroutines.</p><p>Examples of lvalues:</p><table class="table is-bordered centered pod-table"> <thead> <tr><th>Declaration</th><th>lvalue</th><th>Comments</th></tr> </thead> <tbody> <tr><td>my $x;</td><td>$x</td><td></td></tr> <tr><td>my ($a, $b);</td><td>($a, $b)</td><td></td></tr> <tr><td>has $!attribute;</td><td>$!attribute</td><td>Only inside classes</td></tr> <tr><td>has $.attrib is rw;</td><td>$.attrib</td><td></td></tr> <tr><td>sub a is rw { $x };</td><td>a()</td><td></td></tr> </tbody> </table> <p>Examples of things that are not lvalues:</p><table class="table is-bordered centered pod-table"> <tbody> <tr><td>3</td><td>literals</td></tr> <tr><td>constant x = 3;</td><td>constants</td></tr> <tr><td>has $.attrib;</td><td>attributes; you can only assign to $!attrib</td></tr> <tr><td>sub f { }; f();</td><td>"normal" subs are not writable</td></tr> <tr><td>sub f($x) { $x = 3 };</td><td>error - parameters are read-only by default</td></tr> </tbody> </table> <p>These are typically called <a href="#rvalue">rvalues</a>.</p> <h1 id="Mainline" class="raku-h1"><a name="index-entry-Mainline-Mainline" data-indexedheader="Reference;Mainline"></a><a href="#Glossary" title="go to top of document">Mainline<a class="raku-anchor" title="direct link" href="#Mainline">§</a></a></h1> <!-- defnmark Mainline 1 --> <p>The <code>mainline</code> is the program text that is not part of any kind of block.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">use</span> v6.c; <span class="highlite-COMMENT"># mainline </span><span class="highlite-KEYWORD">sub</span> <span class="highlite-ROUTINE">f</span> { <span class="highlite-COMMENT"># not in mainline, in sub f </span>} <span class="highlite-ROUTINE">f</span>(); <span class="highlite-COMMENT"># in mainline again </span></pre> </div> </div> <p>You can also have the mainline of any package-like declarator, such as class, <a href="/language/modules">module</a>, <a href="/language/grammars">grammar</a>, etc. These are typically run just after the class/module/grammar have been compiled (or when loaded from a precompiled file).</p> <h1 id="Mayspec" class="raku-h1"><a name="index-entry-Mayspec-Mayspec" data-indexedheader="Reference;Mayspec"></a><a href="#Glossary" title="go to top of document">Mayspec<a class="raku-anchor" title="direct link" href="#Mayspec">§</a></a></h1> <!-- defnmark Mayspec 1 --> <p>Stands for "Maybe Specification". Usually refers to existing tests in the <a href="https://github.com/Raku/roast/">language specification</a>. The speaker is indicating they did not check whether the test is a spectest or a propspec test; i.e., whether the test is included in a released language specification or is a new test, proposed for the next version of the spec.</p> <h1 id="MoarVM" class="raku-h1"><a name="index-entry-MoarVM-MoarVM" data-indexedheader="Reference;MoarVM"></a><a href="#Glossary" title="go to top of document">MoarVM<a class="raku-anchor" title="direct link" href="#MoarVM">§</a></a></h1> <!-- defnmark MoarVM 1 --> <p>MoarVM is short for Metamodel On A Runtime Virtual Machine. It's a virtual machine designed specifically for <a href="#NQP">NQP</a> and its <a href="/language/mop">MOP</a>: <a href="#6model">6model</a>. A document about <a href="https://github.com/MoarVM/MoarVM/blob/master/docs/reveal.md">the purpose of MoarVM</a>. MoarVM has some similarities with the Hotspot VM so you may peruse its <a href="http://openjdk.java.net/groups/hotspot/docs/HotSpotGlossary.html">glossary</a> for entries missing from the present one.</p> <h1 id="Multi-dispatch" class="raku-h1"><a name="index-entry-Multi-Dispatch-MMD-Multi-dispatch" data-indexedheader="Reference;Multi-Dispatch"></a><a href="#Glossary" title="go to top of document">Multi-dispatch<a class="raku-anchor" title="direct link" href="#Multi-dispatch">§</a></a></h1> <!-- defnmark Multi-dispatch 1 --> <p>The mechanism used to invoke different routines (<a href="/type/Method"><code>Method</code></a>s or <a href="/type/Sub"><code>Sub</code></a>s) of the same name, selecting the correct one based on the <a href="/type/Parameter"><code>Parameter</code></a> prototype and the arguments it was called with.</p><p>The selection process is primarily based on types and number of arguments (<a href="#Arity">arity</a>), where the narrowest, most specific candidate wins, typically without regard to the order of declaration. The <code>is default</code> trait may be used as a tie breaker in this first phase. There is also a secondary phase where some different tie breakers may be evaluated in order of declaration of the methods or subs.</p> <h1 id="multi-method" class="raku-h1"><a name="index-entry-multi-method-multi-method" data-indexedheader="Reference;multi-method"></a><a href="#Glossary" title="go to top of document">multi-method<a class="raku-anchor" title="direct link" href="#multi-method">§</a></a></h1> <!-- defnmark multi-method 1 --> <p>A <a href="/type/Method">method</a> that has multiple candidates going by the same name and are subject to <a href="#Multi-dispatch">Multi-Dispatch</a>.</p> <h1 id="Née" class="raku-h1"><a name="index-entry-Née-Née" data-indexedheader="Reference;Née"></a><a href="#Glossary" title="go to top of document">Née<a class="raku-anchor" title="direct link" href="#Née">§</a></a></h1> <!-- defnmark Née 1 --> <p>"Formerly known as".</p> <h1 id="NFG" class="raku-h1"><a name="index-entry-NFG-NFG" data-indexedheader="Reference;NFG"></a><a href="#Glossary" title="go to top of document">NFG<a class="raku-anchor" title="direct link" href="#NFG">§</a></a></h1> <!-- defnmark NFG 1 --> <p>Normal Form Grapheme is the way Raku implements graphemes, using a normal form in which strings with the same graphemes can be easily compared in constant time. More on that on <a href="https://6guts.wordpress.com/2015/04/12/this-week-unicode-normalization-many-rts/">these articles</a> <a href="https://6guts.wordpress.com/2015/04/20/this-week-digging-into-nfg-fixing-use-fatal-and-more/">in 6guts</a> and a fun explanation of how NFG works in <a href="https://irclogs.raku.org/perl6/2018-04-29.html#16:57-0002">this IRC log</a>.</p> <h1 id="Niecza" class="raku-h1"><a name="index-entry-Niecza-Niecza" data-indexedheader="Reference;Niecza"></a><a href="#Glossary" title="go to top of document">Niecza<a class="raku-anchor" title="direct link" href="#Niecza">§</a></a></h1> <!-- defnmark Niecza 1 --> <p>An implementation of Raku targeting the .NET platform. No longer actively maintained.</p> <h1 id="Not_Quite_Perl" class="raku-h1"><a name="index-entry-NQP-Not_Quite_Perl" data-indexedheader="Reference;NQP"></a><a href="#Glossary" title="go to top of document">Not Quite Perl<a class="raku-anchor" title="direct link" href="#Not_Quite_Perl">§</a></a></h1> <!-- defnmark Not_Quite_Perl 1 --> <p>See <a href="#NQP">NQP</a>.</p> <h1 id="NQP" class="raku-h1"><a name="index-entry-Not_Quite_Perl-NQP" data-indexedheader="Reference;Not Quite Perl"></a><a href="#Glossary" title="go to top of document">NQP<a class="raku-anchor" title="direct link" href="#NQP">§</a></a></h1> <!-- defnmark NQP 1 --> <p>NQP is a primitive language for writing subroutines and methods using a subset of the Raku syntax. It's not intended to be a full-fledged programming language, nor does it provide a runtime environment beyond the basic VM primitives. Compilers (such as <a href="#Rakudo">Rakudo</a>) typically use NQP to compile action methods that convert a parse tree into its equivalent abstract syntax tree representation.</p> <h1 id="NYI" class="raku-h1"><a name="index-entry-NYI-NYI" data-indexedheader="Reference;NYI"></a><a href="#Glossary" title="go to top of document">NYI<a class="raku-anchor" title="direct link" href="#NYI">§</a></a></h1> <!-- defnmark NYI 1 --> <p>Not Yet Implemented</p> <h1 id="opcode" class="raku-h1"><a name="index-entry-opcode-opcode" data-indexedheader="Reference;opcode"></a><a href="#Glossary" title="go to top of document">opcode<a class="raku-anchor" title="direct link" href="#opcode">§</a></a></h1> <!-- defnmark opcode 1 --> <p>An opcode, or operation code, is a bytecode operation, that is, a command of the language actually used on the virtual machine. They are not usually intended for human consumption, but they are usually specified somewhere, like <a href="https://github.com/MoarVM/MoarVM/blob/master/docs/bytecode.markdown">this document for MoarVM</a>.</p> <h1 id="Operator" class="raku-h1"><a name="index-entry-Operator-Operator" data-indexedheader="Reference;Operator"></a><a href="#Glossary" title="go to top of document">Operator<a class="raku-anchor" title="direct link" href="#Operator">§</a></a></h1> <!-- defnmark Operator 1 --> <p>An expression is made of operators and operands. More precisely it is made of an operator and operands that can be subexpressions or <a href="#value">value</a>s. Operators are an alternative syntax for a <a href="#multi-method">multi-method</a>. With that syntax, what would be the arguments of the function are named operands instead. Operators are classified into <a href="https://github.com/Raku/old-design-docs/blob/master/S02-bits.pod#Grammatical_Categories">categories</a> of categories. A category has a precedence, an arity, and can be <a href="#fiddly">fiddly</a>, <a href="#iffy">iffy</a>, <a href="#diffy">diffy</a>. Raku is very creative as to what is an operator, so there are many categories. Operators are made of many tokens, possibly with a subexpression. For example, <code>@a[0]</code> belongs to the postcircumfix category, is broken into the operand <code>@a</code> and the postcircumfix operator <code>[0]</code> where <code>0</code> is the postcircumfixed subexpression.</p><p>The <code><O(I<...>)></code> construction gives information about an operator that completes the information provided by its category. Below <code>%conditional</code> is the category, <code>:reducecheck<ternary></code>, which specifies calling <code>.ternary</code> to post-process the <a href="#Parse_tree">parse subtree</a> and <code>:pasttype<if></code> specifies the NQP <a href="#opcode">opcode</a> generated in the AST from the parse subtree.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-STRING_DELIMITER"><</span><span class="highlite-STRING">O('%conditional, :reducecheck<ternary</span><span class="highlite-STRING_DELIMITER">></span><span class="highlite-OPERATOR">,</span> :pasttype<<span class="highlite-KEYWORD">if</span>><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">)></span><span class="highlite-STRING_DELIMITER"></span></pre> </div> </div> <h1 id="Parse_tree" class="raku-h1"><a name="index-entry-Parse_Tree-Parse_tree" data-indexedheader="Reference;Parse Tree"></a><a href="#Glossary" title="go to top of document">Parse tree<a class="raku-anchor" title="direct link" href="#Parse_tree">§</a></a></h1> <!-- defnmark Parse_tree 1 --> <p>A <a href="https://en.wikipedia.org/wiki/Parse_tree">parse tree</a> represents the structure of a string or sentence according to a grammar. <a href="/type/Grammar"><code>Grammar</code></a>s in Raku output parse trees when they successfully match a string.</p> <h1 id="Parameter" class="raku-h1"><a name="index-entry-Parameter-Parameter" data-indexedheader="Reference;Parameter"></a><a href="#Glossary" title="go to top of document">Parameter<a class="raku-anchor" title="direct link" href="#Parameter">§</a></a></h1> <!-- defnmark Parameter 1 --> <p><a href="/type/Parameter"><code>Parameter</code></a> is a class to define parameters to <a href="/type/Sub"><code>Sub</code></a>routines, <a href="/type/Method"><code>Method</code></a>s and <a href="/type/Callable"><code>Callable</code></a> blocks. As opposed to the arguments you specify when calling a subroutine/method/callable block.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">sub</span> foo(<span class="highlite-NAME_SCALAR">$bar</span>) { <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$bar</span> } <span class="highlite-COMMENT"># $bar is a parameter </span>foo(42); <span class="highlite-COMMENT"># 42 is an argument</span></pre> </div> </div> <h1 id="Parrot" class="raku-h1"><a name="index-entry-Parrot-Parrot" data-indexedheader="Reference;Parrot"></a><a href="#Glossary" title="go to top of document">Parrot<a class="raku-anchor" title="direct link" href="#Parrot">§</a></a></h1> <!-- defnmark Parrot 1 --> <p>A <a href="#Virtual_machine">virtual machine</a> designed to run Raku and other dynamic languages. No longer actively maintained.</p> <h1 id="PAST" class="raku-h1"><a name="index-entry-PAST-PAST" data-indexedheader="Reference;PAST"></a><a href="#Glossary" title="go to top of document">PAST<a class="raku-anchor" title="direct link" href="#PAST">§</a></a></h1> <!-- defnmark PAST 1 --> <p><a href="#Parrot">Parrot</a> AST.</p> <h1 id="Perl" class="raku-h1"><a name="index-entry-Perl-Perl" data-indexedheader="Reference;Perl"></a><a href="#Glossary" title="go to top of document">Perl<a class="raku-anchor" title="direct link" href="#Perl">§</a></a></h1> <!-- defnmark Perl 1 --> <p>The Perl programming language.</p> <h1 id="Perl_6" class="raku-h1"><a name="index-entry-Perl_6-Perl_6" data-indexedheader="Reference;Perl 6"></a><a href="#Glossary" title="go to top of document">Perl 6<a class="raku-anchor" title="direct link" href="#Perl_6">§</a></a></h1> <!-- defnmark Perl_6 1 --> <p>The name used for Raku before October 2019.</p> <h1 id="PERL" class="raku-h1"><a name="index-entry-PERL-PERL" data-indexedheader="Reference;PERL"></a><a href="#Glossary" title="go to top of document">PERL<a class="raku-anchor" title="direct link" href="#PERL">§</a></a></h1> <!-- defnmark PERL 1 --> <p>A way to describe <a href="#Perl">Perl</a> as a language, considered to be improper by many in the <a href="/language/community">Perl Community</a>.</p> <h1 id="POD" class="raku-h1"><a name="index-entry-POD-POD" data-indexedheader="Reference;POD"></a><a href="#Glossary" title="go to top of document">POD<a class="raku-anchor" title="direct link" href="#POD">§</a></a></h1> <!-- defnmark POD 1 --> <p><strong>P</strong>lain <strong>O</strong>l' <strong>D</strong>ocumentation, a documentation format understood by Raku. See <a href="/language/pod">here</a> for further information.</p> <h1 id="POV" class="raku-h1"><a name="index-entry-POV-POV" data-indexedheader="Reference;POV"></a><a href="#Glossary" title="go to top of document">POV<a class="raku-anchor" title="direct link" href="#POV">§</a></a></h1> <!-- defnmark POV 1 --> <p>Stands for "Proof Of Viability". To be included in the language specification, a "proof of viability" implementation of the feature must exist in at least one mostly-compliant Raku compiler.</p> <h1 id="Propspec" class="raku-h1"><a name="index-entry-Propspec-Propspec" data-indexedheader="Reference;Propspec"></a><a href="#Glossary" title="go to top of document">Propspec<a class="raku-anchor" title="direct link" href="#Propspec">§</a></a></h1> <!-- defnmark Propspec 1 --> <p>Stands for "Proposed Specification". Usually refers to existing tests in the <a href="https://github.com/Raku/roast/">language specification</a> that are proposed for inclusion in the next release.</p> <h1 id="Pull_request" class="raku-h1"><a name="index-entry-Pull_request-Pull_request" data-indexedheader="Reference;Pull request"></a><a href="#Glossary" title="go to top of document">Pull request<a class="raku-anchor" title="direct link" href="#Pull_request">§</a></a></h1> <!-- defnmark Pull_request 1 --> <p>A feature of <a href="https://github.com">GitHub</a> and other git hosts like <a href="https://gitlab.com">GitLab</a> that allows you to make patches to be easily applied using the GitHub web user interface. It means you request someone to do a git pull from your <a href="#Repository">repository</a> to hers. PR is its usual acronym.</p> <h1 id="priming" class="raku-h1"><a name="index-entry-priming-priming" data-indexedheader="Reference;priming"></a><a href="#Glossary" title="go to top of document">priming<a class="raku-anchor" title="direct link" href="#priming">§</a></a></h1> <!-- defnmark priming 1 --> <p>Priming (sometimes called <a href="https://en.wikipedia.org/wiki/Partial_application">partial function application</a> in other programming languages) is the act of creating a new function by providing some but not all of the arguments to an existing function. For example, to create a function that takes one argument and adds 42 to it, you could prime the addition operator with <code>42</code> as a single argument: <code>* + 42</code>. See <a href="/type/Whatever">Whatever-priming</a> and <a href="/type/Code#method_assuming">assuming</a>.</p> <h1 id="property" class="raku-h1"><a name="index-entry-property-property" data-indexedheader="Reference;property"></a><a href="#Glossary" title="go to top of document">property<a class="raku-anchor" title="direct link" href="#property">§</a></a></h1> <!-- defnmark property 1 --> <p>In this context, it either refers to an <a href="/language/objects#index-entry-Property-property">object property</a>, which is the value of an instance variable, or a <a href="/language/regexes#Unicode_properties">Unicode property</a> which are codepoint features that allow programs to identify what kind of entity they represent, that is, if they are a letter, or a number, or something completely different like a control character.</p> <h1 id="pugs" class="raku-h1"><a name="index-entry-pugs-pugs" data-indexedheader="Reference;pugs"></a><a href="#Glossary" title="go to top of document">pugs<a class="raku-anchor" title="direct link" href="#pugs">§</a></a></h1> <!-- defnmark pugs 1 --> <p><a href="https://en.wikipedia.org/wiki/Pugs">pugs</a> was one of the first interpreters/compilers written for Raku. It was written in Haskell by Audrey Tang.</p> <h1 id="QAST" class="raku-h1"><a name="index-entry-QAST-QAST" data-indexedheader="Reference;QAST"></a><a href="#Glossary" title="go to top of document">QAST<a class="raku-anchor" title="direct link" href="#QAST">§</a></a></h1> <!-- defnmark QAST 1 --> <p>Successor to <a href="#PAST">PAST</a> ('Q' being the next letter after 'P').</p> <h1 id="Rakudo" class="raku-h1"><a name="index-entry-Rakudo-Rakudo" data-indexedheader="Reference;Rakudo"></a><a href="#Glossary" title="go to top of document">Rakudo<a class="raku-anchor" title="direct link" href="#Rakudo">§</a></a></h1> <!-- defnmark Rakudo 1 --> <p>Rakudo is the name of a Raku implementation that runs on <a href="#MoarVM">MoarVM</a> and the JVM. It is an abbreviation of <code>Rakuda-do</code>, which, when translated from Japanese, means "The Way of the Camel". Also, in Japanese, "Rakudo" means "Paradise."</p> <h1 id="Reify" class="raku-h1"><a name="index-entry-Reify-Reify" data-indexedheader="Reference;Reify"></a><a href="#Glossary" title="go to top of document">Reify<a class="raku-anchor" title="direct link" href="#Reify">§</a></a></h1> <!-- defnmark Reify 1 --> <p>In the English language, <a href="https://www.dictionary.com/browse/reify">reify means</a> "to convert into or regard as a concrete thing." Its meaning in Raku is very similar, in that conceptual things, like "elements of an infinite list", get <em>reified</em> when you try to operate on some of them. In general, reification means turning a potential element (be it an element in a lazy list that has not been computed yet or an element in a container that has not been extracted) into its actual value.</p> <h1 id="Repository" class="raku-h1"><a name="index-entry-Repository-Repository" data-indexedheader="Reference;Repository"></a><a href="#Glossary" title="go to top of document">Repository<a class="raku-anchor" title="direct link" href="#Repository">§</a></a></h1> <!-- defnmark Repository 1 --> <p>A filesystem under control of a source control management application, usually git, that holds the sources for a project, library or application. This file, for instance, is in <a href="https://github.com/Raku/doc">a GitHub repository</a>. Repositories store not only files, but also history of changes and can be used by the developing or writing team for interaction through issues or comments to code.</p><p>In Raku context, however, a repository is also a short name for <em>compilation unit repository</em> and constitutes a system that locates and loads modules, managing their installation and precompilation. They are structured as linked lists, including chain of repositories ending in the default <code>Compunit::Repository::Installation</code>.</p> <h1 id="RHS" class="raku-h1"><a name="index-entry-RHS-RHS" data-indexedheader="Reference;RHS"></a><a href="#Glossary" title="go to top of document">RHS<a class="raku-anchor" title="direct link" href="#RHS">§</a></a></h1> <!-- defnmark RHS 1 --> <p>Acronym for Right-Hand Side, usually refers to the right-hand side of assignment expressions such as <code>my $bound := $rhs</code>.</p> <h1 id="roast" class="raku-h1"><a name="index-entry-roast-roast" data-indexedheader="Reference;roast"></a><a href="#Glossary" title="go to top of document">roast<a class="raku-anchor" title="direct link" href="#roast">§</a></a></h1> <!-- defnmark roast 1 --> <p>The Raku <a href="#Test_suite">specification tests</a>, which live here: <a href="https://github.com/Raku/roast/">https://github.com/Raku/roast/</a>. Originally developed for <a href="#pugs">pugs</a>, it now serves all Raku implementations. Why roast? It's the <strong>r</strong>epository <strong>o</strong>f <strong>a</strong>ll <strong>s</strong>pec <strong>t</strong>ests.</p> <h1 id="Roles" class="raku-h1"><a name="index-entry-role-Roles" data-indexedheader="Reference;role"></a><a href="#Glossary" title="go to top of document">Roles<a class="raku-anchor" title="direct link" href="#Roles">§</a></a></h1> <!-- defnmark Roles 1 --> <p>Roles, mix-ins or traits define interfaces and/or implementation of those interfaces as well as instance variables using them, and are mixed-in when declaring classes that follow that interface. <a href="#Abstract_class">Abstract classes</a> are particular examples of Roles where the actual implementation is deferred to the class that uses that Role.</p><p>Roles are part of Raku's <a href="/language/objects">object system</a>, and are declared using the <a href="/language/objects#index-entry-role_declaration-role">role</a> keyword and used in class declaration via <a href="/routine/does">does</a>.</p> <h1 id="rvalue" class="raku-h1"><a name="index-entry-rvalue-rvalue" data-indexedheader="Reference;rvalue"></a><a href="#Glossary" title="go to top of document">rvalue<a class="raku-anchor" title="direct link" href="#rvalue">§</a></a></h1> <!-- defnmark rvalue 1 --> <p>A value that can be used on the right-hand side of an assignment. See also <a href="#lvalue">lvalue</a>.</p> <h1 id="SAP" class="raku-h1"><a name="index-entry-SAP-SAP" data-indexedheader="Reference;SAP"></a><a href="#Glossary" title="go to top of document">SAP<a class="raku-anchor" title="direct link" href="#SAP">§</a></a></h1> <!-- defnmark SAP 1 --> <p>Stands for "Specification APpendices". The <a href="https://github.com/Raku/roast/tree/master/APPENDICES">SAP</a> includes optional tests that implementations may choose to follow, but don't necessarily have to.</p><p>Can be used as a verb. To <em>SAP</em> something is to place it into Specification Appendices.</p> <h1 id="Semilist" class="raku-h1"><a name="index-entry-Semilist-Semilist" data-indexedheader="Reference;Semilist"></a><a href="#Glossary" title="go to top of document">Semilist<a class="raku-anchor" title="direct link" href="#Semilist">§</a></a></h1> <!-- defnmark Semilist 1 --> <p>A semilist is a <em>semicolon-separated</em> list like this one: <code>1;3;5</code>, and is actually a list of lists, with each component of the semilist being a slice of a particular dimension. <code>@array[1;3;5]</code> would be equivalent to <code>@array[1][3][5]</code>.</p> <h1 id="Sigil" class="raku-h1"><a name="index-entry-Sigil-Sigil" data-indexedheader="Reference;Sigil"></a><a href="#Glossary" title="go to top of document">Sigil<a class="raku-anchor" title="direct link" href="#Sigil">§</a></a></h1> <!-- defnmark Sigil 1 --> <p>In Perl, the sigil is the first character of a variable name. It must be either $, @, %, or & respectively for a <a href="/type/Scalar"><code>Scalar</code></a>, <a href="/type/Array"><code>Array</code></a>, <a href="/type/Hash"><code>Hash</code></a>, or <a href="/type/Code"><code>Code</code></a> variable. See also Twigil and role. Also sigiled variables allow short conventions for <a href="#Variable_interpolation">variable interpolation</a> in a double quoted string, or even postcircumfix expressions starting with such a variable.</p> <h1 id="Sigilless_variable" class="raku-h1"><a name="index-entry-Sigilless_Variable-Sigilless_variable" data-indexedheader="Reference;Sigilless Variable"></a><a href="#Glossary" title="go to top of document">Sigilless variable<a class="raku-anchor" title="direct link" href="#Sigilless_variable">§</a></a></h1> <!-- defnmark Sigilless_variable 1 --> <p><a href="/language/variables#index-entry-\_(sigilless_variables)">Sigilless variables</a> are actually aliases to the value it is assigned to them, since they are not containers. Once you assign a sigilless variable (using the escape <code>\</code>), its value cannot be changed.</p> <h1 id="Spesh" class="raku-h1"><a name="index-entry-Spesh-Spesh" data-indexedheader="Reference;Spesh"></a><a href="#Glossary" title="go to top of document">Spesh<a class="raku-anchor" title="direct link" href="#Spesh">§</a></a></h1> <!-- defnmark Spesh 1 --> <p>A functionality of the <a href="#MoarVM">MoarVM</a> platform that uses runtime gathered data to improve commonly used pieces of <a href="#bytecode">bytecode</a>. It is much like a JIT compiler, except that those usually output machine code rather than bytecode.</p> <h1 id="STD" class="raku-h1"><a name="index-entry-STD-STD" data-indexedheader="Reference;STD"></a><a href="#Glossary" title="go to top of document">STD<a class="raku-anchor" title="direct link" href="#STD">§</a></a></h1> <!-- defnmark STD 1 --> <p><code>STD.pm</code> is the "standard" Raku grammar definition (see <a href="https://github.com/perl6/std/">https://github.com/perl6/std/</a>) that was used to implement Raku. STD.pm is no longer really a "specification" in a proscriptive sense: it's more of a guideline or model for Raku implementations to follow.</p> <h1 id="Stub" class="raku-h1"><a name="index-entry-Stub-Stub" data-indexedheader="Reference;Stub"></a><a href="#Glossary" title="go to top of document">Stub<a class="raku-anchor" title="direct link" href="#Stub">§</a></a></h1> <!-- defnmark Stub 1 --> <p>Stubs define name and signature of methods whose implementation is deferred to other classes.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">role</span> Canine { <span class="highlite-KEYWORD">method</span> bark { <span class="highlite-OPERATOR">...</span> } <span class="highlite-COMMENT"># the ... indicates a stub </span>}</pre> </div> </div> <p>Classes with stubs are <a href="#Abstract_class">Abstract classes</a>.</p> <h1 id="Symbol" class="raku-h1"><a name="index-entry-Symbol-Symbol" data-indexedheader="Reference;Symbol"></a><a href="#Glossary" title="go to top of document">Symbol<a class="raku-anchor" title="direct link" href="#Symbol">§</a></a></h1> <!-- defnmark Symbol 1 --> <p>Fancy alternative way to denote a name. Generally used in the context of <a href="/language/modules">module</a>s linking, be it in the OS level, or at the Raku <a href="#Virtual_machine">virtual machine</a> level for modules generated from languages targeting these VMs. The set of imported or exported symbols is called the symbol table.</p> <h1 id="Synopsis" class="raku-h1"><a name="index-entry-Synopsis-Synopsis" data-indexedheader="Reference;Synopsis"></a><a href="#Glossary" title="go to top of document">Synopsis<a class="raku-anchor" title="direct link" href="#Synopsis">§</a></a></h1> <!-- defnmark Synopsis 1 --> <p>The current human-readable description of the Raku language. Still in development. Much more a community effort than the <a href="#Apocalypse">Apocalypses</a> and <a href="#Exegesis">Exegeses</a> were. The current state of the language is reflected by <a href="#roast">roast</a>, its <a href="#Test_suite">test suite</a>, not the synopses where speculative material is not always so flagged or more recent additions have not been documented. This is even more true of material that has not been yet implemented.</p> <h1 id="Syntax_analysis" class="raku-h1"><a name="index-entry-Syntax_Analysis-Syntax_analysis" data-indexedheader="Reference;Syntax Analysis"></a><a href="#Glossary" title="go to top of document">Syntax analysis<a class="raku-anchor" title="direct link" href="#Syntax_analysis">§</a></a></h1> <!-- defnmark Syntax_analysis 1 --> <p>A syntax or syntactic analysis is equivalent to <a href="https://en.wikipedia.org/wiki/Parsing">parsing</a> a string to generate its <a href="#Parse_tree">parse tree</a>.</p> <h1 id="Test_suite" class="raku-h1"><a name="index-entry-test_suite-Test_suite" data-indexedheader="Reference;test suite"></a><a href="#Glossary" title="go to top of document">Test suite<a class="raku-anchor" title="direct link" href="#Test_suite">§</a></a></h1> <!-- defnmark Test_suite 1 --> <p>The Raku test suite is <a href="#roast">roast</a>.</p> <h1 id="TheDamian" class="raku-h1"><a name="index-entry-TheDamian-TheDamian" data-indexedheader="Reference;TheDamian"></a><a href="#Glossary" title="go to top of document">TheDamian<a class="raku-anchor" title="direct link" href="#TheDamian">§</a></a></h1> <!-- defnmark TheDamian 1 --> <p><a href="#IRC">IRC</a> screen name for <a href="#Damian_Conway">Damian Conway</a>, writer of the original <a href="#Exegesis">Exegeses</a>.</p> <h1 id="TimToady" class="raku-h1"><a name="index-entry-TimToady-TimToady" data-indexedheader="Reference;TimToady"></a><a href="#Glossary" title="go to top of document">TimToady<a class="raku-anchor" title="direct link" href="#TimToady">§</a></a></h1> <!-- defnmark TimToady 1 --> <p><a href="#IRC">IRC</a> screen name for <a href="#Larry_Wall">Larry Wall</a>, creator of Perl. The name comes from the pronunciation of <a href="#TIMTOWTDI">TIMTOWTDI</a> as a word.</p> <h1 id="token" class="raku-h1"><a name="index-entry-Token-token" data-indexedheader="Reference;Token"></a><a href="#Glossary" title="go to top of document">token<a class="raku-anchor" title="direct link" href="#token">§</a></a></h1> <!-- defnmark token 1 --> <p>In this context, a <a href="/syntax/token"><code>token</code></a> is a regex that does not backtrack. In general, <a href="https://en.wikipedia.org/wiki/Lexical_analysis">tokens</a> are extracted from the source program while <a href="#Lexing">lexing</a>.</p> <h1 id="Thunk" class="raku-h1"><a name="index-entry-Thunk-Thunk" data-indexedheader="Reference;Thunk"></a><a href="#Glossary" title="go to top of document">Thunk<a class="raku-anchor" title="direct link" href="#Thunk">§</a></a></h1> <!-- defnmark Thunk 1 --> <p>A piece of code that isn't immediately executed, but doesn't have an independent scope.</p> <h1 id="Tight_and_loose_precedence" class="raku-h1"><a name="index-entry-Tight-Loose-Tight_and_loose_precedence" data-indexedheader="Reference;Tight"></a><a href="#Glossary" title="go to top of document">Tight and loose precedence<a class="raku-anchor" title="direct link" href="#Tight_and_loose_precedence">§</a></a></h1> <!-- defnmark Tight_and_loose_precedence 1 --> <p>In this context, tight or tighter refers to <a href="/language/functions#Precedence">precedence rules</a> and is the opposite of <code>looser</code>. Precedence rules for new terms are always expressed in relationship with other terms, so <code>is tighter</code> implies that operands with that operator will be grouped before operands with the looser operator. Operators with <a href="/language/operators#Tight_AND_precedence">tight precedence</a> are grouped with priority to others and are generally tighter than most others; loose <a href="/language/traps#Loose_Boolean_operators">exactly the opposite</a>, so it is always convenient to be aware of the exact precedence of all operators used in an expression.</p> <h1 id="Truthy_and_Falsy" class="raku-h1"><a name="index-entry-Truthy-Falsy-Truthy_and_Falsy" data-indexedheader="Reference;Truthy"></a><a href="#Glossary" title="go to top of document">Truthy and Falsy<a class="raku-anchor" title="direct link" href="#Truthy_and_Falsy">§</a></a></h1> <!-- defnmark Truthy_and_Falsy 1 --> <p>A value is "truthy" if it evaluates to <code>True</code> in Boolean context and "falsy" if it evaluates to <code>False</code>.</p><p>For example, a non-empty string is considered <code>True</code> and an empty string <code>False</code>:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-OPERATOR">so</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-OPERATOR">so</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">non-empty</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «True» </span> <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">truthy</span><span class="highlite-STRING_DELIMITER">"</span> <span class="highlite-KEYWORD">if</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">non-empty</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «truthy» </span></pre> </div> </div> <p>while <a href="/type/Numeric"><code>Numeric</code></a>s are considered <code>True</code> when non-zero:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-OPERATOR">so</span> 0; <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-OPERATOR">so</span> 1; <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-OPERATOR">so</span> -1; <span class="highlite-COMMENT"># OUTPUT: «True» </span> <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">truthy</span><span class="highlite-STRING_DELIMITER">"</span> <span class="highlite-KEYWORD">if</span> -1; <span class="highlite-COMMENT"># OUTPUT: «truthy» </span><span class="highlite-ROUTINE">say</span> 0 <span class="highlite-OPERATOR">||</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">falsy</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «falsy» </span></pre> </div> </div> <h1 id="twine" class="raku-h1"><a name="index-entry-twine-twine" data-indexedheader="Reference;twine"></a><a href="#Glossary" title="go to top of document">twine<a class="raku-anchor" title="direct link" href="#twine">§</a></a></h1> <!-- defnmark twine 1 --> <p>A data structure used to hold a POD string with embedded formatting codes. For example:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-RAKUDOC_MARKUP">=begin pod</span><span class="highlite-RAKUDOC_MARKUP"> </span><span class="highlite-RAKUDOC_TEXT">C<foo> </span><span class="highlite-RAKUDOC_MARKUP">=end pod </span><span class="highlite-ROUTINE">say</span> $=pod[0].<span class="highlite-ROUTINE">contents</span>[0].<span class="highlite-ROUTINE">contents</span>.<span class="highlite-ROUTINE">raku</span>; </pre> </div> </div> <p>The output will be:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">[<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> Pod::FormattingCode.<span class="highlite-ROUTINE">new</span>(<span class="highlite-ROUTINE">type</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">C</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> <span class="highlite-ROUTINE">meta</span> <span class="highlite-OPERATOR">=></span> []<span class="highlite-OPERATOR">,</span> <span class="highlite-ROUTINE">config</span> <span class="highlite-OPERATOR">=></span> {}<span class="highlite-OPERATOR">,</span> <span class="highlite-ROUTINE">contents</span> <span class="highlite-OPERATOR">=></span> [<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo</span><span class="highlite-STRING_DELIMITER">"</span>])<span class="highlite-OPERATOR">,</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING_DELIMITER">"</span>] </pre> </div> </div> <p><sup class="content-footnote"><a name="fnret1" href="#fn1">[1]</a></sup> </p> <h1 id="Type_objects" class="raku-h1"><a name="index-entry-Type_Objects-Type_objects" data-indexedheader="Reference;Type Objects"></a><a href="#Glossary" title="go to top of document">Type objects<a class="raku-anchor" title="direct link" href="#Type_objects">§</a></a></h1> <!-- defnmark Type_objects 1 --> <p>A <a href="/language/classtut#A_word_on_types">type object</a> is an object that is used to represent a type or a class. Since in object oriented programming everything is an object, classes are objects too, and they inherit from <a href="/type/Mu"><code>Mu</code></a>.</p> <h1 id="Type_smiley" class="raku-h1"><a name="index-entry-Type_Smiley-Type_smiley" data-indexedheader="Reference;Type Smiley"></a><a href="#Glossary" title="go to top of document">Type smiley<a class="raku-anchor" title="direct link" href="#Type_smiley">§</a></a></h1> <!-- defnmark Type_smiley 1 --> <p>A <a href="/language/signatures#Constraining_argument_definiteness">type smiley</a> is a suffix a type may have that indicates the definiteness of values that can typecheck against it. This may be <code>:D</code> to indicate that only defined values can typecheck (i.e. instances), <code>:U</code> to indicate that only undefined values can typecheck (i.e. type objects), or <code>:_</code> to indicate that both defined and undefined values can typecheck. These resemble emoticons, thus the name.</p> <h1 id="value" class="raku-h1"><a name="index-entry-value-value" data-indexedheader="Reference;value"></a><a href="#Glossary" title="go to top of document">value<a class="raku-anchor" title="direct link" href="#value">§</a></a></h1> <!-- defnmark value 1 --> <p>A value is what is actually contained in a container such as a variable. Used in expressions such as <a href="/language/glossary#lvalue">lvalue</a>, to indicate that that particular container can be assigned to.</p> <h1 id="UB" class="raku-h1"><a name="index-entry-UB-UB" data-indexedheader="Reference;UB"></a><a href="#Glossary" title="go to top of document">UB<a class="raku-anchor" title="direct link" href="#UB">§</a></a></h1> <!-- defnmark UB 1 --> <p>Stands for "Undefined Behavior". In other words, it is something that is not explicitly specified by the language specification.</p> <h1 id="Value_type" class="raku-h1"><a name="index-entry-Value_type-Value_type" data-indexedheader="Reference;Value type"></a><a href="#Glossary" title="go to top of document">Value type<a class="raku-anchor" title="direct link" href="#Value_type">§</a></a></h1> <!-- defnmark Value_type 1 --> <p>A type is known as a <strong>value type</strong> if it is immutable and any instance of that type is interchangeable with any other instance "of the same value"—that is, any instance constructed in the same way. An instance of a value type is often <em>called</em> a <strong>value</strong> (but should not be confused with <a href="#lvalue">lvalue</a>s or <a href="#rvalue">rvalue</a>s).</p><p>For example, numbers are value types, so a number constructed one place in your program with, for instance, the literal <code>3</code> can't be changed in any way—it simply <em>is</em> 3—and any later use of the literal <code>3</code> can safely be pointed at the same place in memory as the first with no ill consequences.</p><p>Classes doing the roles <a href="/type/Numeric"><code>Numeric</code></a> and <a href="/type/Stringy"><code>Stringy</code></a> are among a few examples of built-in value types.</p><p>A value type is created by ensuring that an instance of the value type is immutable (i.e., its attributes cannot be modified after construction) and that its <a href="/routine/WHICH"><code>WHICH</code></a> method returns the same thing every time an instance with the same value is constructed (and conversely returns a different thing every time an instance with a different value is constructed).</p><p>The language is free to optimize based on the assumption that equivalent instances of value types are interchangeable, but you should not depend on any such optimization. For instance, if you want <a href="/routine/clone"><code>clone</code></a> to return an instance of <code>self</code>, or you want instance construction to be <a href="https://en.wikipedia.org/wiki/Memoization">memoized</a> so that re-construction of a previously-constructed value always returns the same instance, you currently must override this behavior yourself.</p><p>(The same would hold true of object finalization, but if your instances need special destruction behavior, you almost certainly do not actually have a value type. Values should be thought of as "timeless" and existing in some ideal form outside of your program's memory, like natural values are.)</p> <h1 id="Variable" class="raku-h1"><a name="index-entry-Variable-Variable" data-indexedheader="Reference;Variable"></a><a href="#Glossary" title="go to top of document">Variable<a class="raku-anchor" title="direct link" href="#Variable">§</a></a></h1> <!-- defnmark Variable 1 --> <p>A variable is a name for a <a href="/language/containers">container</a>.</p> <h1 id="Variable_interpolation" class="raku-h1"><a name="index-entry-Variable_Interpolation-Variable_interpolation" data-indexedheader="Reference;Variable Interpolation"></a><a href="#Glossary" title="go to top of document">Variable interpolation<a class="raku-anchor" title="direct link" href="#Variable_interpolation">§</a></a></h1> <!-- defnmark Variable_interpolation 1 --> <p>The value of variables is interpolated into strings by simply inserting that variable into the string:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$polation</span>=<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">polation</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">inter</span><span class="highlite-NAME_SCALAR">$polation</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «interpolation»</span></pre> </div> </div> <p>This might need curly braces in case it precedes some alphanumeric characters</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$inter</span>=<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">inter</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-ESCAPE">{</span><span class="highlite-NAME_SCALAR">$inter</span><span class="highlite-ESCAPE">}</span><span class="highlite-STRING">polation</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «interpolation»</span></pre> </div> </div> <p>Interpolation occurs in <a href="/language/contexts#String">string context</a>, so a valid stringification method must exist for the class. More general interpolation can be achieved using the <a href="/language/quoting#Interpolation:_qq">double q</a> quoting constructs.</p> <h1 id="Virtual_machine" class="raku-h1"><a name="index-entry-Virtual_Machine-Virtual_machine" data-indexedheader="Reference;Virtual Machine"></a><a href="#Glossary" title="go to top of document">Virtual machine<a class="raku-anchor" title="direct link" href="#Virtual_machine">§</a></a></h1> <!-- defnmark Virtual_machine 1 --> <p>A virtual machine is the Raku compiler entity that executes the <a href="#bytecode">bytecode</a>. It can optimize the bytecode or generate machine code Just in Time. Examples are <a href="#MoarVM">MoarVM</a>, <a href="#Parrot">Parrot</a> (who are intended to run Raku) and more generic virtual machines such as JVM and Javascript.</p> <h2 id="WAT" class="raku-h2"><a name="index-entry-WAT-WAT" data-indexedheader="Reference;WAT"></a><a href="#Glossary" title="go to top of document">WAT<a class="raku-anchor" title="direct link" href="#WAT">§</a></a></h2> <!-- defnmark WAT 2 --> <p>The opposite of a <a href="#DWIM">DWIM</a>; counter-intuitive behavior. It is said that to every DWIM there is a corresponding WAT. See also <a href="https://www.destroyallsoftware.com/talks/wat">https://www.destroyallsoftware.com/talks/wat</a>.</p> <h1 id="whitespace" class="raku-h1"><a name="index-entry-whitespace-whitespace" data-indexedheader="Reference;whitespace"></a><a href="#Glossary" title="go to top of document">whitespace<a class="raku-anchor" title="direct link" href="#whitespace">§</a></a></h1> <!-- defnmark whitespace 1 --> <p>A character or group of blank characters, used to separate words. An example is the space character « ».</p> <h1 id="6model" class="raku-h1"><a name="index-entry-6model-6model" data-indexedheader="Reference;6model"></a><a href="#Glossary" title="go to top of document">6model<a class="raku-anchor" title="direct link" href="#6model">§</a></a></h1> <!-- defnmark 6model 1 --> <p><code>6model</code> is used in the <a href="/language/glossary#MoarVM">MoarVM</a>, and provides primitives used to create an object system. It is described in <a href="https://jnthn.net/papers/2013-yapceu-moarvm.pdf">this presentation by Jonathan Worthington</a> and implemented <a href="https://github.com/MoarVM/MoarVM/tree/master/src/6model">here in MoarVM</a>.</p> </div></div></section> <section class="page-footnotes"> <div class="container"> <div id="_Footnotes" class="footnotes"> <div class="footnote" id="fn1"><span class="footnote-number">1</span><a class="footnote-linkback" href="#fnret1"> [↑] </a>The <code>twine</code> is an array with an odd number of elements beginning with a simple string, alternating with formatting code objects and simple strings, and ending with a simple string; the formatting code objects are inter<code>twine</code>d with the strings. The strings may be empty (as shown in the example). A twine with no formatting code will contain one simple string.</div> </div> </div> </section> </div> </div> </div> <footer class="footer main-footer"> <div class="container px-4"> <nav class="level"> <div class="level-left"> <div class="level-item"> <a href="/about">About</a> </div> <div class="level-item"> <a id="toggle-theme">Toggle theme</a> </div> <div class="level-item" title="867604335 2024-12-30"> <a>Commit</a> </div> </div> <div class="level-right"> <div class="level-item"> <a href="/license">License</a> </div> </div> </nav> </div> </footer> </body> </html>