Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

415 lines (387 sloc) 17.156 kb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Perl 6 Design Documents</title>
<link rel="stylesheet" href="/perl.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script language="javascript">
<!--
$(document).ready(function() {
$('#intro-text').toggle();
$('#read-more').click(function() {
$('#intro-text').toggle();
});
});
// --></script>
</head>
<body style="margin-left: 0.3in">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td align="right">
<form method="get" action="http://www.google.com/search" style="position: absolute; top: 5px; right: 5px; text-align: right; "><div>
<input type="hidden" name="ie" value="UTF-8" />
<input type="hidden" name="oe" value="UTF-8" />
<input type="hidden" name="domains" value="perlcabal.org" />
<input type="hidden" name="sitesearch" value="perlcabal.org/syn/" />
<input type="text" name="q" size="31" maxlength="255" value="" />
<input type="submit" name="btnG" value="Google Search the Synopses" />
</div></form>
</td>
</tr>
</table>
<h2><a name="Feather">Perl 6 Design Documents</a></h2>
<p>The Synopsis documents are the design documents used to guide Perl 6 language, compiler, and test development. As design documents, they're frequently subjected to the rigors of cross-examination through implementation and use in practice. In other words, they may change slightly or radically, but the expectation is that they are ``very close`` to the final shape of Perl 6.</p>
<p>In the past the Synopses have often been referred to as "the formal Perl 6 specification" and "specs", but this usage is being deprecated in favor of treating tests from the "<a href='http://github.com/perl6/roast'>roast</a>" test suite as official specifications. This is consistent with Synopsis 1, which says "Perl 6 is anything that passes the official test suite."
<a href="#" id="read-more">[Read more...]</a></p>
<div id="intro-text">
<p>Note that documents marked DRAFT are really just that. They are often
written by random people, and may be speculative as much or more than
"official specification". </p>
<p>The documents here mostly correspond with the chapters in the Camel Book,
that is, &quot;Programming Perl, 3rd Edition&quot;. However, a few chapters
of that book will no longer be relevant, and those numbers will be resused
for other things. At the moment, this refers to section 7, whose synopsis is
"Iterators", but whose Exegesis is about the module Form.pm. Apocalypses and
Exegeses were only written for some of the early sections; the later sections
have no corresponding apocalypse/exegesis. </p>
<p>Most changes to these specifications have been discussed on the
<a href="http://dev.perl.org/perl6/lists/">perl6-language mailing list</a> or the
<code>#perl6</code> FreeNode channel on IRC.
Additionally, Larry Wall has created an implementation of the parser
for Perl 6 (but it doesn't do any of the backend stuff), and that is usually
regarded as authoritative. </p>
</div>
<p><em>While the Apocalypses and Exegeses are linked here for reference, note
that they are historical documents, whereas the Synopses are kept more
up-to-date and are the primary recommended reference.</em></p>
<table id="doctable">
<tr>
<th></th>
<th></th>
<th><strong>(Specification)</strong>
&nbsp; &nbsp; &nbsp; &nbsp;</th>
<th>(Syn pod)</th>
<th>(Justification)</th>
<th>(Explanation)</th>
</tr>
<tr>
<td>1</td>
<td>Overview</td>
<td><a href="S01.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S01-overview.pod">S01-overview.pod</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/apo/A01.html">Apocalypse</a></td>
</tr>
<tr>
<td>2</td>
<td>Bits and Pieces</td>
<td><a href="S02.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S02-bits.pod">S02-bits.pod</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/apo/A02.html">Apocalypse</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/exe/E02.html">Exegesis</a></td>
</tr>
<tr>
<td>3</td>
<td>Summary&nbsp;of&nbsp;Perl&nbsp;6&nbsp;Operators&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td><a href="S03.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S03-operators.pod">S03-operator.pod</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/apo/A03.html">Apocalypse</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/exe/E03.html">Exegesis</a></td>
</tr>
<tr>
<td>4</td>
<td>Blocks and Statements</td>
<td><a href="S04.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S04-control.pod">S04-control.pod</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/apo/A04.html">Apocalypse</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/exe/E04.html">Exegesis</a></td>
</tr>
<tr>
<td>5</td>
<td>Regexes and Rules</td>
<td><a href="S05.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S05-regex.pod">S05-regex.pod</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/apo/A05.html">Apocalypse</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/exe/E05.html">Exegesis</a></td>
</tr>
<tr>
<td>6</td>
<td>Subroutines</td>
<td><a href="S06.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S06-routines.pod">S06-subroutines.pod</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/apo/A06.html">Apocalypse</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/exe/E06.html">Exegesis</a></td>
</tr>
<tr>
<td>7</td>
<td>Lists and Iteration [DRAFT]</td>
<td><a href="S07.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S07-lists.pod">S07-lists.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>8</td>
<td>Captures and Parcels [DRAFT]</td>
<td><a href="S08.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S08-capture.pod">S08-capture.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>9</td>
<td>Data Structures</td>
<td><a href="S09.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S09-data.pod">S09-data.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>10</td>
<td>Packages</td>
<td><a href="S10.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S10-packages.pod">S10-packages.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>11</td>
<td>Compilation Units</td>
<td><a href="S11.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S11-modules.pod">S11-modules.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>12</td>
<td>Objects</td>
<td><a href="S12.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S12-objects.pod">S12-objects.pod</a></td>
<td><a href="http://dev.perl.org/perl6/doc/design/apo/A12.html">Apocalypse</a></td>
<td></td>
</tr>
<tr>
<td>13</td>
<td>Overloading</td>
<td><a href="S13.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S13-overloading.pod">S13-overloading.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>14</td>
<td>Roles&nbsp;and&nbsp;Parametric&nbsp;Types&nbsp;[DRAFT]</td>
<td><a href="S14.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S14-roles-and-parametric-types.pod">S14-roles-and-parametric-types.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>15</td>
<td>Unicode [DRAFT]</td>
<td><a href="S15.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S15-unicode.pod">S15-unicode.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>16</td>
<td>IO&nbsp;/&nbsp;User&nbsp;/&nbsp;Group&nbsp;[DRAFT]</td>
<td><a href="S16.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S16-io.pod">S16-io.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>17</td>
<td>Concurrency</td>
<td><a href="S17.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S17-concurrency.pod">S17-concurrency.pod</a></td>
<td></td>
<td></td>
</tr>
<tr><td>18</td><td>Compiling</td><td colspan="4">(TBD)</td></tr>
<tr>
<td>19</td><td>Command line interface [DRAFT]</td>
<td><a href="S19.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S19-commandline.pod">S19-commandline.pod</a></td>
<td></td>
<td></td>
</tr>
<tr><td>20</td><td>Introspection</td><td colspan="4">(Draft)</td></td></tr>
<tr>
<td>21</td>
<td>Calling foreign code&nbsp;[DRAFT]</td>
<td><a href="S21.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S21-calling-foreign-code.pod">S21-calling-foreign-code.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>22</td>
<td>Distributions, Recommendations, Delivery and Installation</td>
<td><a href="S22.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S22-package-format.pod">S22-package-format.pod</a></td>
<td></td>
<td></td>
</tr>
<tr><td>23</td><td>Security</td><td colspan="4">(TBD)</td></tr>
<tr>
<td>24</td>
<td>Testing</td>
<td><a href="S24.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S24-testing.pod">S24-testing.pod</a></td>
<td></td>
<td></td>
</tr>
<tr><td>25</td><td>Portable perl</td><td colspan="4">(TBD)</td></tr>
<tr>
<td>26</td>
<td>Documentation</td>
<td><a href="S26.html">Synopsis</a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S26-documentation.pod">S26-documentation.pod</a></td>
<td colspan="2">(HTML rendering of S26 is known to be incomplete)</td>
</tr>
<tr><td>27</td><td>Perl culture</td><td colspan="4">(Draft)</td></tr>
<tr>
<td>28</td>
<td>Special names</td>
<td><a href="S28.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S28-special-names.pod">S28-special-names.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>29</td>
<td>Builtin Functions&nbsp;[DRAFT]</td>
<td><a href="S29.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S29-functions.pod">S29-functions.pod</a></td>
<td></td>
<td></td>
</tr>
<tr><td>30</td><td>Standard perl library</td><td colspan="4">(TBD)</td></tr>
<tr>
<td>31</td>
<td>Pragmatic modules [DRAFT]</td>
<td><a href="S31.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S31-pragmatic-modules.pod">S31-pragmatic-modules.pod</a></td>
<td></td>
<td></td>
</tr>
<tr><td>32</td><td>Setting library [DRAFT]</td><td colspan="4">&nbsp;</td></tr>
<tr>
<td></td>
<td>Basics+&nbsp;[DRAFT]</td>
<td><a href="S32/Basics.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S32-setting-library/Basics.pod">Basics.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>Callable*&nbsp;[DRAFT]</td>
<td><a href="S32/Callable.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S32-setting-library/Callable.pod">Callable.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>Containers*&nbsp;[DRAFT]</td>
<td><a href="S32/Containers.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S32-setting-library/Containers.pod">Containers.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>Exception*&nbsp;[DRAFT]</td>
<td><a href="S32/Exception.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S32-setting-library/Exception.pod">Exception.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>IO*&nbsp;[DRAFT]</td>
<td><a href="S32/IO.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S32-setting-library/IO.pod">IO.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>Numeric*&nbsp;[DRAFT]</td>
<td><a href="S32/Numeric.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S32-setting-library/Numeric.pod">Numeric.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>Rules*&nbsp;[DRAFT]</td>
<td><a href="S32/Rules.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S32-setting-library/Rules.pod">Rules.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>Str&nbsp;[DRAFT]</td>
<td><a href="S32/Str.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S32-setting-library/Str.pod">Str.pod</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>Temporal+</td>
<td><a href="S32/Temporal.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S32-setting-library/Temporal.pod">Temporal.pod</a></td>
<td></td>
<td></td>
</tr>
<tr><td>33</td><td>Diagnostic messages</td><td colspan="4">(TBD)</td></tr>
<tr>
<td>99</td>
<td>Glossary</td>
<td><a href="S99.html"><strong>Synopsis</strong></a></td>
<td><a href="https://raw.github.com/perl6/specs/master/S99-glossary.pod">S99-glossary.pod</a></td>
<td></td>
<td></td>
</tr>
</table>
<h3>Indexes</h3>
<ul>
<li><a href="index_X.html">X tags</a></li>
<li><a href="index_C.html">C tags</a></li>
</ul>
<h3>S32 Key</h3>
<dl>
<dt>* = Document related types as well</dt>
<dt>+ = Not a type name, but documents a group of types</dt>
</dl>
<h2>Differences from Perl 5</h2>
<ul>
<li><a href="Differences.html">Differences Between Perl 5 and Perl 6</a></li>
</ul>
<p>
The Differences document is stored in <code>docs/Perl6/Perl5/Differences.pod</code>
in the <a href="https://github.com/perl6/mu/" title="Perl6 mu repository on Github">mu repository</a>,
if you'd like to make updates to it. Your changes will
automatically appear on feather in less than 1 hour.
</p>
<h2>Further reading</h2>
<p>For further information on Perl 6, links to examples, tutorials etc. please
visit <a href="http://perl6.org/">perl6.org, the official Perl 6
homepage</a>.</p>
<h2>About this page</h2>
<p>The HTML version of Synopses contains code snippets from the official
test suite. In other words, the .t files from the test suite are
divided into pieces and inserted after corresponding paragraph of
the Synopses. The job is done by the Perl 5 script util/smartlinks.pl
living in the <a href="https://github.com/perl6/mu/"
title="Perl6 mu repository on Github">mu repository</a>. It runs once every hour, and is triggered by the file <code>util/update-design.perl6.org.sh</code> in the mu repository. It runs as user <code>design.perl6.org</code> on <a href="https://github.com/perl6/infrastructure-doc/blob/master/hosts/www.p6c.org.pod">www.p6c.org</a>.</p>
</body>
</html>
Jump to Line
Something went wrong with that request. Please try again.