<?xml version="1.0" encoding="windows-1252"?>
<node id="835936" title="Re: How to Implement Perl 6 in Ten Years" created="2010-04-20 23:16:07" updated="2010-04-20 23:16:07">
<type id="11">
note</type>
<author id="2836">
audreyt</author>
<data>
<field name="doctext">
&lt;p&gt;Hi. This is &amp;#21776;&amp;#40179;, a.k.a. Audrey Tang.&lt;/p&gt;

&lt;p&gt;For the record, I think what chromatic wrote above contains a fair 
and accurate assessment to &lt;a href="http://github.com/audreyt/Pugs.hs/"&gt;Pugs.hs&lt;/a&gt; (Perl6-on-Haskell).&lt;/p&gt;

&lt;p&gt;However, please note that it elided over our collective shift of 
focus to the Perl 5 runtime during 2006 on #perl6, which resulted in the
 first CPAN releases of &lt;a href="http://moose.perl.org/"&gt;Moose&lt;/a&gt;, &lt;a href="http://search.cpan.org/dist/Module-Compile/"&gt;Module::Compile&lt;/a&gt;, &lt;a href="http://search.cpan.org/dist/v6/"&gt;v6-alpha&lt;/a&gt; (now evolved 
into &lt;a href="http://github.com/fglock/Perlito/"&gt;Perlito&lt;/a&gt;), &lt;a href="http://search.cpan.org/dist/Pugs-Compiler-Rule/"&gt;Pugs::Compiler::Rule&lt;/a&gt;, etc.&lt;/p&gt;

&lt;p&gt;So while Pugs.hs was indeed suddenly unmaintained due to my '07 
hepatitis outbreak, already by '06 we have redirected our main efforts 
into coding Perl6-on-CPAN.&lt;/p&gt;

&lt;p&gt;Concretely speaking, that means we took various Pugs.hs structures 
(Signatures&lt;a href="http://search.cpan.org/dist/Perl6-Signature/"&gt;&lt;/a&gt;, MetaObject logic, Grammar parser, etc) and coded 
&lt;a href="http://search.cpan.org/dist/Perl6-Signature/"&gt;counterparts&lt;/a&gt; for the Perl5 runtime.&lt;/p&gt;

&lt;p&gt;I'm very happy with what turned out - indeed &lt;a href="http://search.cpan.org/dist/MooseX-Declare/"&gt;MooseX::Declare&lt;/a&gt; and &lt;a href="http://search.cpan.org/dist/perl-5.12.0/"&gt;Perl
 5.12.0&lt;/a&gt; went way far beyond our original vision, in a very good way.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;As for Pugs.hs, the 6.2.x series has already fulfilled its goals.&lt;/p&gt;

&lt;p&gt;In order to code the 6.28.x series (compile-time gradual typing) 
without unreasonable pain, it required several significant changes in 
the host language (Haskell).&lt;/p&gt;

&lt;p&gt;Some of them were &lt;a href="http://hackage.haskell.org/trac/haskell-prime/wiki/Committee"&gt;codified&lt;/a&gt; into &lt;a href="http://www.mail-archive.com/haskell@haskell.org/msg22460.html"&gt;Haskell 2010&lt;/a&gt; (then known as 
haskell-prime), such as &lt;a href="http://hackage.haskell.org/trac/haskell-prime/wiki/PatternGuards"&gt;PatternGuards&lt;/a&gt;; some were implemented in GHC, 
such as &lt;a href="http://www.haskell.org/haskellwiki/GHC/Type_families"&gt;Type Families&lt;/a&gt; and &lt;a href="http://www.haskell.org/haskellwiki/Quasiquotation"&gt;Quasi-Quoting&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In addition to the language changes, a better theoretical 
understanding of &lt;a href="http://www.haskell.org/haskellwiki/Generalised_algebraic_datatype"&gt;GADTs&lt;/a&gt; (which was deep black magic when Pugs.hs 6.2.x 
first used them), of OO+Functional type inference (&lt;a href="http://lamp.epfl.ch/%7Eodersky/publications.html"&gt;Martin Odersky&lt;/a&gt; et 
al), of sound STM semantics and gradual typing (&lt;a href="http://ecee.colorado.edu/%7Esiek/"&gt;Jeremy Siek&lt;/a&gt; et al), was 
also essential in coding the type system of Perl 6 as originally 
envisioned.&lt;/p&gt;

&lt;p&gt;Also notable was basic groundworks for 6.28.x such as &lt;a href="http://panicsonic.blogspot.com/2009/12/adventures-in-parsec.html"&gt;Parsec 
Transformers&lt;/a&gt;, &lt;a href="http://hackage.haskell.org/trac/ghc/wiki/SharedLibraries"&gt;Dynamic-linkable binaries&lt;/a&gt; and &lt;a href="http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell"&gt;Data Parallelism&lt;/a&gt; (to name a 
few) has gradually materialized as of early 2010, so folks who'd like to
 tackle type systems now have a significantly easier 
compilation-environment support than even a year before.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;However, speaking for myself, though Haskell became sufficiently 
attractive to implement compile-time type analysis for Perl 6, the 
success of &lt;a href="http://search.cpan.org/dist/Moose/"&gt;Moose&lt;/a&gt; and &lt;a href="http://search.cpan.org/dist/perl-5.12.0/pod/perl5120delta.pod#Pluggable_keywords"&gt;Pluggable Keywords&lt;/a&gt; in Perl 5.12.0 has convinced me 
that we can also fruitfully implement such analysis directly in Perl 6, 
or in Perl6-flavoured CPAN modules, which is a much more straightforward
 way to amass a developer ecosystem than coding it in Haskell.&lt;/p&gt;

&lt;p&gt;As &lt;strong&gt;lambdamoose&lt;/strong&gt; demonstrated, real programmers can write Perl 6 and/or
 Haskell in any language, particularly if that language is as 
polymorphically existentially recursive as Perl 5. :-)&lt;/p&gt;
</field>
<field name="root_node">
835419</field>
<field name="parent_node">
835731</field>
</data>
</node>
