Perl 6
The Long Perl 6 Super-Feature List: Revision 10
When it comes to embracing "embrace and extend", Perl 6 is exceptionally promiscuous in selectively borrowing from other languages (and Perl 6 is very tenacious about refining and generalizing their best ideas). Here is a brief :-) summary of some notable Perl 6 features, starting from a somewhat shorter list in "another FAQ"<>, plus a variety of additions and extensions.

((To-do wish list: It would be nice to have perhaps 3 sub-bullets for each feature giving: (1) a very brief description of it, (2) a very brief explanation of its advantages, and (3) maybe 2 or 3 minimalist examples of it. (4) relevant Perl 5 module or feature that is similar))

^^ Subroutines, Parameters, and Typing

* optional static type annotations (gradual typing)
* proper parameter lists
* user-defined operators
* multi dispatch
* named arguments

^^ OO

* declarative classes with strong encapsulation
* full OO exception handling
* multi-dispatched methods (aka method overloading)
* hierarchical construction and destruction
* distributive method dispatch
* method delegation
* many widely useful objects/types

^^ Regexes (now Grammars)

* LL and LR grammars (including a built-in grammar for Perl 6 itself, which is "an overridable and reusable grammar"<>)
* named regexes
* overlapping and exhaustive regex matches within a string
* named captures
* parse-tree pruning
* incremental regex matching against input streams

^^ Power Features from Functional Languages and Elsewhere

* hypothetical variables
* hyperoperators (i.e. vector processing)
* function currying
* junctions (i.e. superpositional values, subroutines, and types)
* coroutines
* lazy evaluation (including virtual infinite lists)

^^ Things we have in Perl 5 which will just be better in Perl 6

* better threading
* better garbage collection
* much better foreign function interface (cross-language support)
* full Unicode processing support
* a built-in switch statement

^^ Other

(feel free to break this down into other headings)

* macros (that are implemented in Perl itself)
* active metadata on values, variables, subroutines, and types
* support for the concurrent use of multiple versions of a module
* extensive and powerful introspection facilities (including of POD)
* user-definable operators (from the full Unicode set)
* chained comparisons
* a universally accessible aliasing mechanism
* lexical exporting (via a cleaner, declarative syntax)
* multimorphic equality tests
* state variables
* invariant sigils, plus twigils (minimalist symbolic "Hungarian")

Holy freaking cow! How can most mere-mortals contend with all this stuff? Well, the good news is that _you_ most likely _won't_ ever need to know (or use) much of this stuff. You can learn and use a moderate and comfortable subset of Perl 6 that meets your typical needs. However these features provide an extremely powerful toolkit for experts to produce modules and other tools that you can use (without you needing to know about their internal wiring and plumbing). Perhaps counterintuitively, many of these features will make Perl 6 substantially easier and simpler than Perl 5 for more advanced applications (once you get used to it). Many of these features will also help "future-proof" Perl 6 by providing many means of incorporating new extensions.

As you can see, Perl 6 thus takes the powerful evolutionary advantages of "hybrid vigor" to new extremes. First there was "extreme programming", now we have Perl 6, "the first extreme programming language". If you think our many friends, including {Ruby, Python, Smalltalk, Lisp, Haskell, and others}, are generally more {cool, powerful, productive, and fun} than {C, C++, Java, C#}, then you'll likely recognize Perl 6 as the new "top of the -food- tool chain" for practical high-powered fun.

Upload Files

Click "Browse" to find the file you want to upload. When you click "Upload file" your file will be uploaded and added to the list of attachments for this page.

Maximum file size: 50MB

File Name Author Date Uploaded Size

Save Page As

Enter a meaningful and distinctive title for your page.

Page Title:

Tip: You'll be able to find this page later by using the title you choose.

Page Already Exists

There is already a page named XXX. Would you like to:

Save with a different name:

Save the page with the name "XXX"

Append your text to the bottom of the existing page named: "XXX"

Upload Files

Click "Browse" to find the file you want to upload. When you click "Add file" this file will be added to the list of attachments for this page, and uploaded when you save the page.

Add Tags

Enter a tag and click "Add tag". The tag will be saved when you save the page.