| 1 | # Copyright (C) 2003-2007, The Perl Foundation. |
|---|
| 2 | |
|---|
| 3 | =pod |
|---|
| 4 | |
|---|
| 5 | =head0 Project Overview |
|---|
| 6 | |
|---|
| 7 | Z<CHP-1> |
|---|
| 8 | |
|---|
| 9 | Perl 6 is the next major version of Perl. It is a significant update of the |
|---|
| 10 | language, and the first version of Perl that is defined by a specification, |
|---|
| 11 | not by a reference implementation. The |
|---|
| 12 | goal of Perl 6 is to add support for much-needed new features, and |
|---|
| 13 | still be cleaner, faster, and easier to use. |
|---|
| 14 | |
|---|
| 15 | The X<Perl 6;overview> Perl 6 project is vast and complex, but it |
|---|
| 16 | isn't complicated. The project runs on a simple structure with very |
|---|
| 17 | little management overhead. That's really the only way it could run. |
|---|
| 18 | The project doesn't have huge cash or time resources. Its only |
|---|
| 19 | resource is the people who believe in the project enough to spend |
|---|
| 20 | their off-hours--their "relaxation" time--working to see it completed. |
|---|
| 21 | This chapter is as much about people as it is about Perl. |
|---|
| 22 | |
|---|
| 23 | =head1 The Birth of Perl 6 |
|---|
| 24 | |
|---|
| 25 | Z<CHP-1-SECT-1> |
|---|
| 26 | |
|---|
| 27 | X<Perl 6;history> |
|---|
| 28 | Back on July 18, 2000, the second day of the fourth Perl Conference |
|---|
| 29 | (TPC 4), a small band of Perl geeks gathered to prepare for a meeting |
|---|
| 30 | of the Perl 5 Porters later that day. The topic at hand was the |
|---|
| 31 | current state of the Perl community. Four months had passed since the |
|---|
| 32 | 5.6.0 release of Perl, and although it introduced some important |
|---|
| 33 | features, none were revolutionary. |
|---|
| 34 | |
|---|
| 35 | There had been very little forward movement in the previous year. It |
|---|
| 36 | was generally acknowledged that the Perl 5 codebase had grown |
|---|
| 37 | difficult to maintain. At the same time, infighting on the |
|---|
| 38 | I<perl5-porters> list had grown so intense that some of the best |
|---|
| 39 | developers decided to leave. It was time for a change, but no one was |
|---|
| 40 | quite sure what to do. They started conservatively with plans to |
|---|
| 41 | change the organization of Perl development. |
|---|
| 42 | |
|---|
| 43 | An hour into the discussion, around the time most people nod off in |
|---|
| 44 | any meeting, Jon Orwant (the reserved, universally respected editor of |
|---|
| 45 | the Perl Journal) stepped quietly into the room and snapped everyone |
|---|
| 46 | to attention with an entirely uncharacteristic and well-planned |
|---|
| 47 | gesture. I<Smash!> A coffee mug hit the wall. "We are *@$!-ed |
|---|
| 48 | (I<Crash!>) unless we can come up with something that will excite the |
|---|
| 49 | community (I<Pow!>), because everyone's getting bored and going off |
|---|
| 50 | and doing other things! (I<Bam!>)" (At least, that's basically how |
|---|
| 51 | Larry tells it. As is usually the case with events like this, no one |
|---|
| 52 | remembers exactly what Jon said.) |
|---|
| 53 | |
|---|
| 54 | Awakened by this display, the group started to search for a real |
|---|
| 55 | solution. The language needed room to grow. It needed the freedom to |
|---|
| 56 | evaluate new features without the obscuring weight of legacy code. |
|---|
| 57 | The community needed something to believe in, something to get excited |
|---|
| 58 | about. |
|---|
| 59 | |
|---|
| 60 | Within a few hours the group settled on Perl 6, a complete rewrite of |
|---|
| 61 | Perl. The plan wasn't just a language change, just an implementation |
|---|
| 62 | change, or just a social change. It was a paradigm shift. Perl 6 would |
|---|
| 63 | be the community's rewrite of Perl, and the community's rewrite of |
|---|
| 64 | itself. |
|---|
| 65 | |
|---|
| 66 | Would Perl 6, particularly Perl 6 as a complete rewrite, have happened |
|---|
| 67 | without this meeting? Almost certainly. The signs appeared on the |
|---|
| 68 | lists, in conferences, and in journals months in advance. If it hadn't |
|---|
| 69 | started that day, it would have happened a week later, or perhaps a |
|---|
| 70 | few months later, but it would have happened. It was a step the |
|---|
| 71 | community needed to take. |
|---|
| 72 | |
|---|
| 73 | =head1 In the Beginning . . . |
|---|
| 74 | |
|---|
| 75 | Z<CHP-1-SECT-2> |
|---|
| 76 | |
|---|
| 77 | Let's pause and consider Perl development up to that fateful meeting. |
|---|
| 78 | Perl 6 is just another link in the chain. The motivations behind it |
|---|
| 79 | and the directions it will take are partially guided by history. |
|---|
| 80 | |
|---|
| 81 | Perl was first developed in 1987 by Larry Wall while he was working as |
|---|
| 82 | a programmer for Unisys. After creating a configuration and monitoring |
|---|
| 83 | system for a network that spanned the two American coasts, he was |
|---|
| 84 | faced with the task of assembling usable reports from log files |
|---|
| 85 | scattered across the network. The available tools simply weren't up to |
|---|
| 86 | the job. A linguist at heart, Larry set out to create his own |
|---|
| 87 | programming language, which he called I<perl>. He released the first |
|---|
| 88 | version of Perl on December 18, 1987 and made it freely available on |
|---|
| 89 | Usenet (this was before the Internet took over the world, remember). |
|---|
| 90 | Before long, a small community of Perl programmers grew up around it. |
|---|
| 91 | |
|---|
| 92 | The early adopters of Perl were system administrators who had hit the |
|---|
| 93 | wall with shell scripting, I<awk>, and I<sed>. However, in the |
|---|
| 94 | mid-1990s Perl's audience exploded with the advent of the Web, as Perl |
|---|
| 95 | was tailor-made for CGI scripting and other web-related programming. |
|---|
| 96 | |
|---|
| 97 | Meantime, the Perl language itself kept growing, as Larry and others |
|---|
| 98 | kept adding new features. Probably the most revolutionary change in |
|---|
| 99 | Perl (until Perl 6, of course) was the addition of modules and |
|---|
| 100 | object-oriented programming with Perl 5. While this made the |
|---|
| 101 | transition period from Perl 4 to Perl 5 unusually long, it breathed |
|---|
| 102 | new life into the language by providing a modern, modular interface. |
|---|
| 103 | Before Perl 5, Perl was considered simply a scripting language; after |
|---|
| 104 | Perl 5, it was considered a full-fledged programming language. |
|---|
| 105 | |
|---|
| 106 | Larry, meanwhile, started taking a back seat to Perl development and |
|---|
| 107 | allowed others to take responsibility for adding new features and |
|---|
| 108 | fixing bugs in Perl. The Perl 5 Porters (p5p) mailing list became the |
|---|
| 109 | central clearinghouse for bug reports and proposed changes to the Perl |
|---|
| 110 | language, with the "pumpkin holder" (also known as the "pumpking") |
|---|
| 111 | being the programmer responsible for integrating the patches and |
|---|
| 112 | distributing them to the rest of the list for review. Larry continued |
|---|
| 113 | to follow Perl development, but like a parent determined not to |
|---|
| 114 | smother his children, he stayed out of the day-to-day development, |
|---|
| 115 | limiting his involvement to situations in which he was truly needed. |
|---|
| 116 | |
|---|
| 117 | Although you might think that the birth of the Perl 6 project would be |
|---|
| 118 | the first nail in the coffin for Perl 5, that's far from the case. If |
|---|
| 119 | anything, Perl 5 has had a huge resurgence of development, with Perl |
|---|
| 120 | 5.7.0 released only two weeks after the initial decision to go ahead |
|---|
| 121 | with Perl 6. Perl 5.8.0, a July 2002 release by pumpking Jarkko |
|---|
| 122 | Hietaniemi, includes usable Unicode support, a working threads |
|---|
| 123 | interface, safe signals, and a significant improvement of the internals |
|---|
| 124 | with code cleanup, bug fixes, better documentation, and more than |
|---|
| 125 | quadrupled test coverage. 5.8 has quarterly maintenance releases thanks |
|---|
| 126 | to pumpking Nicholas ClarkX<Clark, Nicholas>. The 5.9-5.10 releases have |
|---|
| 127 | Hugo van der Sanden X<van der Sanden, Hugo> as architect and |
|---|
| 128 | RafaE<euml>l Garcia-Suarez X<Garcia-Suarez, RafaE<euml>l> as pumpking. |
|---|
| 129 | Plans for those releases include enhancements to the regular expression |
|---|
| 130 | engine, further internals cleanup and a "use perl6ish" pragma that will |
|---|
| 131 | integrate many of the features of Perl 6. Perl 5 is active and thriving, |
|---|
| 132 | and will continue to be so even after the release of Perl 6.0. |
|---|
| 133 | |
|---|
| 134 | =head1 The Continuing Mission |
|---|
| 135 | |
|---|
| 136 | Z<CHP-1-SECT-3> |
|---|
| 137 | |
|---|
| 138 | Much has changed since the early days of the project. New people join |
|---|
| 139 | and others leave in a regular "changing of the guard" pattern. Plans |
|---|
| 140 | change as the work progresses, and the demands of the work and the |
|---|
| 141 | needs of the community become clearer. Today the Perl 6 project has |
|---|
| 142 | two major parts: language design and internals. Each branch is |
|---|
| 143 | relatively autonomous, though there is a healthy amount of |
|---|
| 144 | coordination between them. |
|---|
| 145 | |
|---|
| 146 | =head2 Language Design |
|---|
| 147 | |
|---|
| 148 | Z<CHP-1-SECT-3.1> |
|---|
| 149 | |
|---|
| 150 | As with all things Perl, the central command of the language design |
|---|
| 151 | process is X<Wall, Larry> Larry Wall, the creator of the Perl |
|---|
| 152 | language. Larry is supported by the rest of the design team: X<Conway, |
|---|
| 153 | Damian> Damian Conway, X<Randal, Allison> Allison Randal, X<Sugalski, |
|---|
| 154 | Dan> Dan Sugalski, X<van der Sanden, Hugo> Hugo van der Sanden, and |
|---|
| 155 | X<chromatic> chromatic. We speak in weekly teleconferences and also |
|---|
| 156 | meet face-to-face a few times a year to hash out ideas for the design |
|---|
| 157 | documents, or to work through roadblocks standing in the way of design |
|---|
| 158 | or implementation. The design team is a diverse group, including |
|---|
| 159 | programmers-for-hire, Perl trainers, and linguists with a broad |
|---|
| 160 | spectrum of interests and experiences. This diversity has proved quite |
|---|
| 161 | valuable in the design process, as each member is able to see problems |
|---|
| 162 | in the design or potential solutions that the other members missed. |
|---|
| 163 | |
|---|
| 164 | =head3 Requests for comments (RFCs) |
|---|
| 165 | |
|---|
| 166 | Z<CHP-1-SECT-3.1.1> |
|---|
| 167 | |
|---|
| 168 | The first step in designing the new language was the RFC (Request For |
|---|
| 169 | Comments) process. This spurred an initial burst of community |
|---|
| 170 | involvement. Anyone was free to submit an X<RFCs> RFC on any subject, |
|---|
| 171 | whether it was as small as adding an operator, or as big as reworking |
|---|
| 172 | OO syntax. Most of the proposals were really quite conservative. The |
|---|
| 173 | RFCs followed a standard format so they would be easier to read and |
|---|
| 174 | easier to compare. |
|---|
| 175 | |
|---|
| 176 | Each RFC was subject to peer review, carried out in an intense few |
|---|
| 177 | weeks around October 2000. One thing the RFC process demonstrated was |
|---|
| 178 | that the Perl community still wasn't quite ready to move beyond the |
|---|
| 179 | infighting that had characterized Perl 5 Porters earlier that |
|---|
| 180 | year.N<Mark-Jason Dominus wrote an excellent critique of the RFC |
|---|
| 181 | process (U<http://www.perl.com/pub/a/2000/11/perl6rfc.html>). It may |
|---|
| 182 | seem harsh to people accustomed to the more open and tolerant |
|---|
| 183 | community of today, but it's an accurate representation of the time |
|---|
| 184 | when it was written.> Even though few RFCs have been accepted without |
|---|
| 185 | modification, the process identified a large number of irritants in |
|---|
| 186 | the language. These have served as signposts for later design efforts. |
|---|
| 187 | |
|---|
| 188 | =head3 Apocalypses, Synopses, Exegeses |
|---|
| 189 | |
|---|
| 190 | Z<CHP-1-SECT-3.1.2> |
|---|
| 191 | |
|---|
| 192 | X<Apocalypses> |
|---|
| 193 | The ApocalypsesN<An "apocalypse" in the sense of "revelation," not |
|---|
| 194 | "end of the world.">, Synopses, and ExegesesN<An "exegesis" is an |
|---|
| 195 | explanation or interpretation of a text.> are an important part of the |
|---|
| 196 | design process. Larry started the Apocalypse series as a systematic |
|---|
| 197 | way of answering the RFCs. Each Apocalypse corresponds to a chapter in |
|---|
| 198 | his book I<Programming Perl>, and addresses the features in the |
|---|
| 199 | chapter that are likely to change. |
|---|
| 200 | |
|---|
| 201 | However, the Apocalypses have become much more than a simple response |
|---|
| 202 | to RFCs. Larry has a startling knack for looking at 12 solutions to a |
|---|
| 203 | problem, pulling out the good bits from each one, and combining them |
|---|
| 204 | into a solution that is 10 times better than any of the proposals |
|---|
| 205 | alone. The Apocalypses are an excellent example of this "Larry |
|---|
| 206 | Effect." He addresses each relevant RFC, and gives reasons why he |
|---|
| 207 | accepted or rejected various pieces of it. But each Apocalypse also |
|---|
| 208 | goes beyond a simple "yes" and "no" response to attack the roots of |
|---|
| 209 | the problems identified in the RFCs. |
|---|
| 210 | |
|---|
| 211 | X<Synopses> |
|---|
| 212 | The Synopses are summaries of each Apocalypse. These act as a quick |
|---|
| 213 | reference for the current state of design, and are more approachable |
|---|
| 214 | than the often lengthy Apocalypses. The Synopsis series didn't start |
|---|
| 215 | until Apocalypse 5, but Luke PalmerX<Palmer, Luke> is now working on |
|---|
| 216 | the retroactive Synopses 2-4. |
|---|
| 217 | |
|---|
| 218 | X<Exegeses> |
|---|
| 219 | Damian Conway's Exegeses are extensions of each Apocalypse. The |
|---|
| 220 | Exegeses are built around practical code examples that apply and |
|---|
| 221 | explain the new ideas. |
|---|
| 222 | |
|---|
| 223 | =head3 The p6l mailing list |
|---|
| 224 | |
|---|
| 225 | Z<CHP-1-SECT-3.1.3> |
|---|
| 226 | |
|---|
| 227 | X<mailing lists, Perl 6> |
|---|
| 228 | X<Perl 6;mailing lists> |
|---|
| 229 | X<p6l (Perl 6 language mailing list)> |
|---|
| 230 | X<Perl 6 language mailing list (p6l)> |
|---|
| 231 | X<Palmer, Luke> |
|---|
| 232 | X<Cawley, Piers> |
|---|
| 233 | The next body of design work is the Perl 6 Language mailing list |
|---|
| 234 | (U<perl6-language@perl.org>), often fondly referred to as "p6l." Piers |
|---|
| 235 | Cawley writes a weekly summary of all the Perl 6 mailing lists. Luke |
|---|
| 236 | Palmer has been deputized as unofficial referee of the list. He |
|---|
| 237 | answers questions that don't require the direct involvement of the |
|---|
| 238 | design team or that have been answered before. The list has |
|---|
| 239 | approximately 40 regular contributors in any given month, as well as a |
|---|
| 240 | large number of occasional posters and lurkers. Some people have |
|---|
| 241 | participated since the very beginning; others appear for a few months |
|---|
| 242 | and move on. |
|---|
| 243 | |
|---|
| 244 | Even though the individuals change, the general tone of p6l is the |
|---|
| 245 | same. It's an open forum for any ideas on the user-visible parts of |
|---|
| 246 | Perl 6. In the typical pattern, one person posts an idea and 5 to 10 |
|---|
| 247 | people respond with criticisms or suggestions. The list periodically |
|---|
| 248 | travels down a speculative thread like a runaway train, but these |
|---|
| 249 | eventually run out of steam. Then Larry picks out the golden bits and |
|---|
| 250 | gently tells the rest that no, he never intended Perl 6 to have |
|---|
| 251 | neo-vulcan mechanoid scooby-dooby-doos. Even when Larry doesn't |
|---|
| 252 | post, he follows the list and the traffic serves as a valuable |
|---|
| 253 | catalyst for his thoughts. |
|---|
| 254 | |
|---|
| 255 | =head3 The test suite |
|---|
| 256 | |
|---|
| 257 | Z<CHP-1-SECT-3.1.4> |
|---|
| 258 | |
|---|
| 259 | X<Tang, Audrey> |
|---|
| 260 | X<Pugs> |
|---|
| 261 | X<Test suite> |
|---|
| 262 | |
|---|
| 263 | The design documents describe the Perl 6 language in prose, and the test |
|---|
| 264 | suite is intended to translate that specification into code. |
|---|
| 265 | |
|---|
| 266 | In 2005 Audrey Tang started a Perl 6 compiler named I<Pugs>. It is |
|---|
| 267 | written in Haskell, and moved very fast. The test suite began both as |
|---|
| 268 | regression tests and as a feature wish list, and is now slowly being |
|---|
| 269 | translated into an implementation agnostic, offical test suite that can |
|---|
| 270 | be used by all implementations. |
|---|
| 271 | |
|---|
| 272 | Once it is done, every compiler that passes the test suite may name |
|---|
| 273 | itself I<Perl 6>. |
|---|
| 274 | |
|---|
| 275 | =cut |
|---|
| 276 | |
|---|
| 277 | # vim: sw=3 ts=3 expandtab tw=72 |
|---|