Dual-license your content for inclusion in The Perl 5 Wiki using this HOWTO, or join us for a chat on irc.freenode.net#PerlNet.
Perl 6
From PerlNet
Contents |
What is Perl 6?
Perl 6 is the next version of the Perl programming language. It's much more than a rewrite; the project attempts to address the interpreter, the language, and perhaps redefine what is possible. As Larry Wall said: "Perl 5 was my rewrite of Perl. I want Perl 6 to be the community's rewrite of Perl and of the community." There's no official release date yet.
There are a few implementations of Perl 6 currently being worked upon. One is the Pugs project, a Perl 6 compiler written in Haskell. Although this implementation is fairly slow, it serves as a great way to prototype Perl 6 design ideas and get people involved.
The primary project is the Parrot Virtual Machine which is designed to efficiently compile and execute bytecode for any interpreted language. Parrot will be the target for the final Perl 6 compiler, and is already usable as a backend for Pugs, as well as variety of other languages.
A secondary, but essential, project is Ponie which will enable Perl 5 code to run on Parrot, using Perl 6 structures.
What's wrong with Perl 5?
Perl 5's biggest problem is its implementation. It's eleven years old, runs on 70 or so different platforms and maintains compatibility with both previous revisions, and previous versions. Maintaining it is hard, and there are fewer and fewer people willing to do it.
So what does Perl 6 do to fix it?
Perl 6 completely redefines the Perl language. There are a lot of things that Perl 5 got right and most of these will stay. There are also a lot of things that Perl 5 (or previous versions of Perl) got wrong, such as excessive reliance on global variables, and these will go.
Perl 6 will not be backwards compatible with any previous version of Perl, however thanks to Ponie (a Perl 5 on Perl 6 implementation) it will be able to act as though it is compatible with previous versions. By dropping backwards compatibility, Perl 6 can create a new opaque object system, redefine operators to make them more intuitive and add a whole bunch of funky new features.
What are these new features?
- Multimethods
- Coroutines
- Continuations
- Useful threading
- Junctions
- Roles
- Hyperoperators
- Macros
- An overridable and reusable grammar
- Garbage collection
- Improved foreign function interface
- Module aliasing and versioning
- Improved introspection
- Extensible and overridable primitives
And better, cleaner, more maintable internals; cleaner OO; greater consistency; rules and grammars. For a more detailed explanation of these benefits and reasons for Perl 6 in general read What is Perl 6?
Will CPAN and existing programs still work?
Absolutely! Perl 6 features a "Perl 5 compatability mode". When Perl 6 encounters a line starting with package it immediately parses the rest of the file as Perl 5. Most existing CPAN modules already start with a package declaration. Stand-alone programs, and non-conforming CPAN modules will only need a package ... line added for them to operate correctly. In stand-alone programs this line would be package main; .
For this reason we encourage all modules to always begin with a package line, to ensure forward compatability.
Will I have to re-write my applications?
The answer is probably not straight away. Currently there is work being done to interface Perl 6 and Perl 5. For instance, in Audrey's talk on Pugs at YAPC::NA 2005 she demonstrates the ability to load and use perl 5 modules when programming with Perl 6 using Pugs.
Sounds great! How do I get involved?
- Read the Use Perl 6 Now! article in The Perl Journal.
- Download Pugs and start playing with the new Perl 6 syntax. You will find information about the Perl 6 language in specification form in the Synopses. Examples of Perl 6 can be found in the examples directory in the Pugs subversion repository. Although Pugs is coded in Haskell the is also room for contributions from people who know Perl 5, C or Javascript.
- If you have interest and/or knowledge on software virtual machines you may want to take a look at Parrot
- For an indication of what are the current hot areas in Perl 6 development you could subscribe to one, some or all of the Perl 6 mailing lists. If you want you can read the archives at nntp.perl.org
History
Topaz (2000)
In early 2000, Chip Salzenburg began project Topaz, a rewrite of Perl 5 using C++ for the interpreter, with the intent that this would eventually be called Perl 6 ([1]). However this project did not become official because before it got Larry Wall's approval, other movements were afoot...
"We are fucked" (2000)
By mid 2000, despite Topaz, Perl development and its community had all but stalled:
- It had become very hard to make changes to the source code without breaking the current features.
- The biggest feature at the time was POE and that was a year old [2].
- Clashes between developers on the perl5 porters email list had lead to the departure of several core developers.
Various perl developers attended a planning meeting at O'Reilly's Open Source Conference in July 2001. Part way through the meeting Jon Orwant, editor at O'Reilly, walked over to the coffee table, picked up a coffee cup and threw it against the wall and said:
- "we are fucked unless we can come up with something that will excite the community, because everyone's getting bored and going off and doing other things".[3]
After much discussion between developers that were present at the meeting it was decided that a complete rewrite was what was desired. Consequently at the conference Larry Wall announced the start of work on Perl 6, a complete rewrite of the language.
RFCs (2000)
[NB. RFCs are of primarily historical interest only. Don't read them to learn Perl 6.]
In the fall of 2000, the community submitted suggestions for the new revision of the language in the form of request for comments (RFCs). In total 361 RFCs were submitted. An index of RFCs is available.
Apocalypses and Exegeses (2001 - 2004)
[NB. Apocalypses and Exegeses are no longer reliable sources for the current Perl 6 design. Please read Synopses (see below) first, and rely on their contents rather than that of the Apocalypses and Exegeses.]
During the period 2001 thru 2004, Larry wrote Apocalypses 1-7, and 12, corresponding to Camel Book chapters of the same numbers, that revealed the bulk of the Perl 6 design. ("An Apocalypse is supposed to reveal good news to good people. (And if it also happens to reveal bad news to bad people, so be it. Just don't be bad.)".)
During the same period, to help mere mortals understand the dense Apocalypses, Damian Conway wrote a series of Exegeses ("exegesis: n. an interpretation and explanation of a text, esp. Holy Writ ... These articles will take each unveiled piece of the design for Perl 6 and demonstrate the new syntax and semantics in an annotated program.").
Synopses (2004 - present)
[NB. Synopses are continually updated as design details evolve.]
The current design documents are the series of Synopses.
Preview and Testing Perl 6 features in Perl 5
Some of the features that were proposed for inclusion in the Perl 6 language were implemented as modules in Perl 5. A significant number of these modules were implemented by Dr Damian Conway, a prominent member of the Perl 6 design team, who has travelled to numerous conferences to give talks on Perl 6.
As at 19-02-2006 these are:
- Perl6::Subs Define your subroutines in the Perl 6 style
- Perl6::Variables Define your subroutines in the Perl 6 style
- Perl6::Rules Implements (most of) the Perl 6 regex syntax
- Perl6::Say Implements the Perl 6 say (print-with-newline) function
- Perl6::Slurp Implements the Perl 6 'slurp' built-in
- Perl6::Parameters Perl 6-style prototypes with named parameters
- Perl6::Placeholders Perl 6 implicitly declared parameters for Perl 5
- Perl6::Contexts array and hash variables turn into references to themselves when used in non-numeric scalar context or as function arguments
- Perl6::Gather Implements the Perl 6 'gather/take' control structure in Perl 5
- Perl6::Export Implements the Perl 6 'is export(...)' trait
- Perl6::Form Implements the Perl 6 'form' built-in
- Perl6::Classes First class classes in Perl 5
- Perl6::Currying Perl 6 subroutine currying for Perl 5
- Perl6::Interpolators Use Perl 6 function-interpolation syntax
- Perl6::Attributes Perl 6-like member variable syntax
- Perl6::Builtins Provide Perl 5 versions of the new Perl 6 builtins
- Perl6::Export::Attrs The Perl 6 'is export(...)' trait as a Perl 5 attribute
Current Work: Implementation of Perl 6
Parrot: The Perl6 Virtual Machine
Parrot is a register based virtual machine. It is to Perl 6 what the Java Virtual Machine is to Java and the Common Language Runtime is for .Net languages. Parrot, however, is designed especially for dynamic languages such as Perl 6. It also could be used for other dynamic languages such as Python. The advantage of having a virtual machine is that it bundles off all of the stuff that is platform dependent into a separate package. It also allows the emulation of features that are missing on some platforms on which the high level, dynamic language needs to run. For further information see the Parrot page.
Pugs: The Perl6 Users Golf System
Pugs is a parser and runtime. The project to create Pugs was initiated by Audrey Tang as an exercise while she was reading "Types and Programming Languages". It is a prototype and development is optimised for fun. Pugs can already be used to run Perl 6 scripts. For more information see the Pugs page.
PGE: Perl6 Grammar Engine
Perl6-Compiler
See Also
External Links
- wikipedia:Perl 6 — A really good write up of Perl 6 features and behaviours.
- http://planetsix.perl-foundation.org/ - Aggregation of Perl 6 blogs.
- Perl 6 Synopses
- http://feather.perl6.nl/syn/ (google)
- google broken - feather isn't currently being indexed?! MitchellNCharity 08:19, 5 January 2008 (EST)
- Synopses have tables of contents (unlike the dev.perl.org copies), and support links to line numbers (eg S09:1161).
- http://dev.perl.org/perl6/doc/synopsis.html (google)
- http://feather.perl6.nl/syn/ (google)
- IRC logs: http://irc.pugscode.org/ (aka http://irclog.perlgeek.de/perl6/ ) (google)
- perl.perl6.language list at nntp.perl (google), and at groups.google.
- http://svn.perl.org/perl6/pugs/trunk/t/ Perl 6 test suite
- not yet indexed or in google code - MitchellNCharity 09:14, 5 January 2008 (EST)
- Pugs — Also includes slides from talks by Audrey
- german Turorial in the german Perl-Community Wiki
Wikis
Wikis where multi-article Perl 6 content can be found/placed.
- http://perl.net.au/wiki/Perl_6 This site. (Mediawiki)
- http://www.perlfoundation.org/perl6/ Perl Foundation's wiki. (Socialtext)
- http://www.perlfoundation.org/parrot/ Home page for Parrot. (Socialtext)
- http://dev.pugscode.org/wiki/ Pugs development. (Trac)
- http://perl6.cz/wiki/Perl_6_and_Parrot_links Assorted links. (Mediawiki)
Books on Perl 6
- Perl 6 and Parrot Essentials, Second Edition By Allison Randal, Dan Sugalski, Leopold Tötsch
- Perl 6 Now: The Core Ideas Illustrated with Perl 5 By Scott Walters

