<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule">

<channel>
<title><![CDATA[Perl 6: The Long Perl 6 Super-Feature List]]></title>
<link>http://www.perlfoundation.org/perl6/index.cgi?the_long_perl_6_super_feature_list</link>
<description></description>
<pubDate>Sat, 06 Feb 2010 02:43:48 -0000</pubDate>
<webMaster>synedra@gmail.com</webMaster>
<generator>Socialtext Workspace v2.14.7.2</generator>

<item>
<title><![CDATA[The Long Perl 6 Super-Feature List]]></title>
<link>http://www.perlfoundation.org/perl6/index.cgi?the_long_perl_6_super_feature_list</link>
<description><![CDATA[<div class="wiki">
<div class="nlw_phrase"><table class='toc'><tr><td><div class="wiki">
<h3 id="contents">Contents: []</h3>
<ul>
<li><span class="nlw_phrase"><a title="section link" href="#subroutines_parameters_and_typing">Subroutines, Parameters, and Typing</a><!-- wiki: {link: [] Subroutines, Parameters, and Typing} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="#oo">OO</a><!-- wiki: {link: [] OO} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="#regexes_now_grammars">Regexes (now Grammars)</a><!-- wiki: {link: [] Regexes (now Grammars)} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="#power_features_from_functional_languages_and_elsewhere">Power Features from Functional Languages and Elsewhere</a><!-- wiki: {link: [] Power Features from Functional Languages and Elsewhere} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="#things_we_have_in_perl_5_which_will_just_be_better_in_perl_6">Things we have in Perl 5 which will just be better in Perl 6</a><!-- wiki: {link: [] Things we have in Perl 5 which will just be better in Perl 6} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="#other">Other</a><!-- wiki: {link: [] Other} --></span></li>
</ul>
</div>
</td></tr></table><!-- wiki: {toc: } --></div><br /><br /><p>
When it comes to embracing &quot;embrace and extend&quot;, 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 <a target="_blank" title="(external link)" href="http://dev.perl.org/perl6/faq.html">another FAQ<!-- wiki-renamed-hyperlink "another FAQ"<http://dev.perl.org/perl6/faq.html> --></a>, plus a variety of additions and extensions.</p>
<p>
((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. Or maybe just link to topics about each item instead?))</p>
<h2 id="subroutines_parameters_and_typing">Subroutines, Parameters, and Typing</h2>
<ul>
<li>optional static type annotations (gradual typing)</li>
<li>proper parameter lists</li>
<li>user-defined operators</li>
<li>multi dispatch</li>
<li>named arguments</li>
<li>generics</li>
</ul>
<h2 id="oo">OO</h2>
<ul>
<li>declarative classes with strong encapsulation</li>
<li>full OO exception handling</li>
<li>multi-dispatched methods (aka method overloading)</li>
<li>hierarchical construction and destruction</li>
<li>distributive method dispatch</li>
<li>method delegation</li>
<li>many widely useful objects/types</li>
<li>custom meta classes, meta object programming</li>
</ul>
<h2 id="regexes_now_grammars">Regexes (now Grammars)</h2>
<ul>
<li>LL and LR grammars (including a built-in grammar for Perl 6 itself, which is <a target="_blank" title="(external link)" href="http://www-128.ibm.com/developerworks/linux/library/l-cpregex.html?ca=dgr-lnxw01Perl6Gram">an overridable and reusable grammar<!-- wiki-renamed-hyperlink "an overridable and reusable grammar"<http://www=-128.ibm.com/developerworks/linux/library/l=-cpregex.html?ca=dgr=-lnxw01Perl6Gram> --></a>)</li>
<li>named regexes</li>
<li>overlapping and exhaustive regex matches within a string</li>
<li>named captures</li>
<li>parse-tree pruning</li>
<li>incremental regex matching against input streams</li>
</ul>
<h2 id="power_features_from_functional_languages_and_elsewhere">Power Features from Functional Languages and Elsewhere</h2>
<ul>
<li>hypothetical variables</li>
<li>hyperoperators (i.e. vector processing)</li>
<li>function currying</li>
<li>junctions (i.e. superpositional values, subroutines, and types)</li>
<li>coroutines</li>
<li>lazy evaluation (including virtual infinite lists)</li>
</ul>
<h2 id="things_we_have_in_perl_5_which_will_just_be_better_in_perl_6">Things we have in Perl 5 which will just be better in Perl 6</h2>
<ul>
<li>better threading</li>
<li>better garbage collection</li>
<li>much better foreign function interface (cross-language support)</li>
<li>full Unicode processing support</li>
<li>string processing on various Unicode levels, including grapheme level</li>
<li>a built-in switch statement</li>
</ul>
<h2 id="other">Other</h2>
<p>
(feel free to break this down into other headings)</p>
<ul>
<li>macros (that are implemented in Perl itself)</li>
<li>user-definable operators (from the full Unicode set)</li>
<li>active metadata on values, variables, subroutines, and types</li>
<li>support for the concurrent use of multiple versions of a module</li>
<li>extensive and powerful introspection facilities (including of POD)</li>
<li>chained comparisons</li>
<li>a universally accessible aliasing mechanism</li>
<li>lexical exporting (via a cleaner, declarative syntax)</li>
<li>multimorphic equality tests</li>
<li>state variables</li>
<li>invariant sigils, plus twigils (minimalist symbolic &quot;Hungarian&quot;)</li>
</ul>
<p>
Holy freaking cow! How can most mere-mortals contend with all this stuff? Well, the good news is that <em>you</em> most likely <em>won't</em> 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 &quot;future-proof&quot; Perl 6 by providing many means of incorporating new extensions.</p>
<p>
As you can see, Perl 6 thus takes the powerful evolutionary advantages of &quot;hybrid vigor&quot; to new extremes. First there was &quot;extreme programming&quot;, now we have Perl 6, &quot;the first extreme programming language&quot;. 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 &quot;top of the <del>food</del> tool chain&quot; for practical high-powered fun.</p>
</div>
]]></description>
<author>Lyle Hopkins</author>
<guid isPermaLink="true">http://www.perlfoundation.org/perl6/index.cgi?the_long_perl_6_super_feature_list</guid>
<pubDate>Sat, 06 Feb 2010 02:43:48 -0000</pubDate>
</item>

</channel>
</rss>