Synopsis 1: Overview
Created: 10 Aug 2004
Last Modified: 11 Feb 2015
Version: 10
This document originally summarized Apocalypse 1, which covers the initial design concept. That original summary may be found below under "Random Thoughts". However, these Synopses also contain updates to reflect the evolving design of Perl 6 over time, unlike the Apocalypses, which are frozen in time as "historical documents". These updates are not marked--if a Synopsis disagrees with its Apocalypse, assume the Synopsis is correct.
Another assumption has been that if we don't talk about something in these Synopses, it's the same as it is in Perl 5. Soon we plan to fill in the gaps with the Perl 5 details though.
Mostly, we're just a bunch of ants all cooperating (sort of) to haul food toward the nest (on average). There are many groups of people working on various bits and pieces as they see fit, since this is primarily a volunteer effort.
This document does not attempt to summarize all these subprojects--see http://perl6.org for such information. What we can say here is that, unlike how it was with Perl 5, none of these projects is designed to be the Official Perl. Perl 6 is anything that passes the official test suite. This test suite was initially developed under the Pugs project because that project was at one point the furthest along in exploring the high-level semantics of Perl 6. (Other projects may be better at other things, such as speed or interoperability. This is fine; it is not necessary that all implementations be equally good at everything.) The official test suite is community property, and is intended to be platform neutral, so that Perl 6 is defined primarily by its desired semantics, not by accidents of history.
Another aspect of this is the Perl 6 compiler will be self-hosting. That is, the compiler will eventually compile itself, at least down to the point where various code-generating backends can take over. This largely removes platform dependencies from the frontend, so that only the backends need to worry about platform-specific issues.
But above all, our project plan is simply to help people find a spot where they can feel like they're creating the future, both for themselves and for others. Around here, that's what we call fun.
perl", will assume that it is being fed Perl 5 code unless the code starts with a "class" or "module" keyword, or you specifically tell it you're running Perl 6 code in some other way, such as by:
#!/usr/bin/perl6
use v6.0;
Also, a file with a .p6 extension may be taken as indicative, as may any other extension containing the digit 6, such as p6l or p6m or pl6 or pm6. (Though .pl and .pm are still perfectly acceptable extensions as long as the Perl-6-ness is indicated by one of the other indicators.)
use v5 at the beginning of a lexical block. Such blocks may be nested:
use v6;
# ...some Perl 6 code...
{
use v5;
# ...some Perl 5 code...
{
use v6;
# ...more Perl 6 code...
}
}
Some platforms may restrict this to a subset of Perl 5 when it is not expedient to include a full Perl 5 interpreter. The standard Perl 6 grammar will include the ability to parse a well-behaved subset of Perl 5 on its own (much like PPI does); implementations are required only to support this subset, though of course they may also choose to implement bug-for-bug compatibility.
-e or the 'no strict' pragma:
perl -e '$x = 1'
#!/usr/bin/perl
no strict;
$x = 1;
If you are reading the HTML version, it is generated from the POD sources in the specs repository under https://github.com/perl6/specs, so edit it there in the git repository if you would like to make changes.
Please post errors and feedback to perl6-language. If you are making a general laundry list, please separate messages by topic.
Larry Wall <larry@wall.org>[ Top ] [ Index of Synopses ]