in reply to Perl6 and Extreme Programming

Here are some of the tenets of XP (stolen from that we intend Perl 6 to support. And some practical examples of Perl 6 features that will support each of them. This list is by no means exhaustive (either of tenets or or supportive features) -- it's more to demonstrate that we aren't (just) marketing geniuses ;-)
The project is divided into iterations/No functionality is added early.
To do that, you need to be able to build applications incrementally. That implies leaving stubs representing components that are essential but not yet built. That's particularly easy in Perl 6:
sub print_report {...}

Move people around/Use collective code ownership.
To do those things, you need to leave behind code that others can pick up easily. Many of the changes we're making to Perl 6 support that. For a simple (but non-trivial) example, rationalizing variable sigils cleans up code dramatically, making it easier to grok quickly. For a more complex example, Larry showed the design team the first draft of A5 yesterday. It's sensational! He's heavily refactored the regex syntax, and the result is that simple regexes become vastly more readable, and complex regexes vastly easier to get right.

Refactor whenever and wherever possible.
One of the unexpected benefits of the structural unification we've been making is that refactoring does become significantly easier. For example, every loop block is now actually a subroutine/closure specification. And if you use the -> $var {...} iterator specification, the loop block is actually a subroutine with parameters. So hoisting that code into a subroutine becomes utterly trivial.

Code must be written to agreed standards.
Perl 6 will make it easier to create, impose, and verify compliance with coding standards. Two examples:
  • Sandboxing will be much easier to use, so it will be possible to turn off language features whose use contravenes the agreed standard. For example, it will be simple to turn off the use of backticks, and have them "caught" at compile-time.
  • It will also be comparatively easy to intercept code in the middle of compilation (e.g. at the optree level) and write Perl modules that verify particular code opposed to individual constructs. For example, you might decree that variable names must conform to the project's data dictionary, and have a "policy test" module check every VAR node in the optree as the program is compiled. Or you might require that all pattern matches use an explicit $var =~ (rather than implicitly matching against the current topic). You'll be able to write a parse-tree analyser to verify that too.

Leave optimization till last.
...or leave it to the machine. An important design goal for both Perl 6 and the underlying Parrot engine is to automate optimization as far as possible. The introduction of variable typing (in addition to Perl 5's value typing) helps there, as does the unification of blocks and closures. At the other end of the spectrum, Parrot's register-based architecture allows us to draw on the extensive literature on hardware and assembler optimization. BTW, where optimization at the higher, human level is desirable, it's almost always optimization of algorithm, not code. Many of the new, more advanced features that Perl 6 will add (e.g. higher order functions, lazy data structures, generators, coroutines, superpositions, smart matching, etc.) are specifically designed to support those more sophisticated algorithms.

No overtime.
Hardly new. Perl is already a "no overtime" language, since it allows you to get more done, more quickly, without the mechanics of the language getting in the way. We have no intention of changing that aspect of the language. In fact, every change we consider for Perl 6 is explicitly weighed against our stated goal that "Easy things should stay easy, hard things should become easier, and impossible things should become merely hard."