Quick jump:  What's new

Go to:
Weblog: Recent Changes 
in Perl 6
Perl 6

Camelia says, "Welcome to the Perl Foundation Perl 6 Wiki!"

Greetings, my name is Camelia, the spokesbug for Perl 6.


This wiki contains information about:

Bless all of our sponsors and supporters.
THANK YOU. Please consider becoming one of them.

Latest "Planet Perl 6" and "Rakudo" (Perl 6 on Parrot) Headlines

The current lists below are auto-generated when you load this page.

fetchrss: http://planetsix.perlfoundation.org/rss20.xml
  • There was an error: 500 Can't connect to planetsix.perlfoundation.org:80 (Bad hostname 'planetsix.perlfoundation.org')

((This line prevents occasional double-spacing of the preceding auto-inserted lines.))

((This line prevents occasional double-spacing of the preceding auto-inserted lines.))

About This Wiki

Development Dashboard


The Development Dashboard is designed to answer two questions:

  • What's left to do to release perl6 to CPAN, as in perl-6.0.0.tar.gz?
  • What's been done so far?

We can't answer the question of "When will Perl 6 be done" without knowing what's left to do. This is a start.

In the mean time, here is the current roadmap:

What's left to do (including in-progress work)?

Create a perl6 repository

perl6 is currently in the Parrot repository in languages/perl6/, but needs to become its own repository.


Language definition

Note: This is outside the control of perl6


  • package so that "perl6 foo.pl" (or some close facsimile) works
  • What command-line arguments are there?


  • What is the list of pages that will exist? Will it be the same as for perl5?
  • The Perl 5 Module Perl6::Doc is an atempt to collect and sort user docs.


  • Where do the bugs go? Is the queue set up for it?
  • Do we have just one perl6bug for all of the various implementations, or is each implementation simply need to provide its own?

Other utilities

  • Define what other utilities will be shipped.
    • cpan? cpanp?
    • dprofpp?
      • Will there even be a profiler?
    • corelist?
    • prove? This assumes there's a Test::Harness, no?


  • Update with current names & addresses of people who worked on Perl 6


  • What gets shipped with perl-6.0.0.tar.gz? What modules? What docs? What other programs?
    • May be a converger (gets defined right at the end)


Here are make targets that have to exist:

  • make
  • make test
  • make install

Test suite

  • Refactor suite to match synopsis organization
  • Review all tests for conformance with language specification
  • Verify spec coverage

Embedding tools

  • perl.h

Release perl6

  • Release RC1
  • Release perl6 as perl-6.0.0.tar.gz to CPAN

What's been done so far?

  • Language definition
  • perl6
    • Compiler converted to use Parrot compiler tools
  • Test suite
    • Initial tests in pugs repository


These features/milestones are explicitly not part of the ramp up to p6.0.0. They may happen on their own, but we will not delay the release of p6.0.0 if they have not been reached.

Specifically not part of perl6.0.0

  • Old perl5-specific files & directories
    • Porting/
    • h2pl/
    • Changes5*
  • Anything platform specific
    • README.* specific to platforms
    • epoc/
    • beos/
    • Cross/
    • apollo/
    • cygwin/
    • mint/
    • mpeix/
    • os2/
    • plan9/
    • qnx/
    • symbian
    • uts/
    • vmesa/
    • vms/
    • vos/
    • win32/
    • utils/
      • Except as specified above.

Resources and other documents

Navigation for: welcome Weblog

Simple Meta Object Programming / Simple Matter Of Programming

is a C based interpreter (runloop) that executes, what different compiler (like Mildew ) produce.

If you want to help SMOP, you can just take on one of the lowlevel S1P implementations and write it. If you have any questions ask ruoso or pmurias at #perl6 @ irc.freenode.org.

The Slides for the talk Perl 6 is just a SMOP are available, it introduces a bit of the reasoning behind SMOP. A newer version of the talk presented at YAPC::EU 2008 is available

SMOP is an alternative implementation of a C engine to run Perl 6. It is focused in getting the most pragmatic approach possible, but still focusing in being able to support all Perl 6 features. Its core resembles Perl 5 in some ways, and it differs from Parrot in many ways, including the fact that SMOP is not a Virtual Machine. SMOP is simply a runtime engine that happens to have a interpreter run loop.

The main difference between SMOP and Parrot (besides the not-being-a-vm thing), is that SMOP is from bottom-up an implementation of the Perl 6 OO features, in a way that SMOP should be able to do a full bootstrap of the Perl 6 type system. Parrot on the other hand have a much more static low-level implementation (the PMC)

The same way PGE is a project on top of Parrot, SMOP will need a grammar engine for itself.
SMOP is the implementation that is stressing the meta object protocol more than any other implementation, and so far that has been a very fruitful exercise, with Larry making many clarifications on the object system thanks to SMOP.

Important topics on SMOP

  • SMOP doesn't recurse in the C stack, and it doesn't actually define a mandatory paradigm (stack-based or register-based). SMOP has a Polymorphic Eval, that allows you to switch from one interpreter loop to another using Continuation Passing Style. See SMOP Stackless.
  • SMOP doesn't define a object system in its own. The only thing it defines is the concept of SMOP Responder Interface, which then encapsulates whatever object system. This feature is fundamental to implement the SMOP Native Types.
  • SMOP is intended to bootstrap itself from the low-level to the high-level. This is achieved by the fact that everything in SMOP is an Object. This way, even the low-level objects can be exposed to the high level runtime. See SMOP OO Bootstrap.
  • SMOP won't implement a parser in its own, it will use STD or whatever parser gets ported to its runtime first.
  • In order to enable the bootstrap, the runtime have a set of SMOP Constant Identifiers that are available for the sub-language compilers to use.
  • There are some special SMOP Values Not Subject to Garbage Collection.
  • A new interpreter implementation SMOP Mold replaced SLIME
  • The "official" smop Perl 6 compiler is mildew - it lives in v6/mildew
  • Currently there exists an old Elf backend which targets SMOP - it lives in misc/elfish/elfX

Other matters


SMOP GSoC 2009

See the Old SMOP Changelog

First Post in Sample Weblog

This is the first post in Sample Weblog. Click New Post to add another post.

Perl 6 Language Design Tablet

Intro - Chapter: 0:History 1:Design 2:Basics 3:Var 4:Op 5:IO 6:Block 7:Sub 8:OOP 9:Rx 10:Meta
Overview - Appendix: A:Index B:Tables C:Cook D:Delta E:Best of F:Links G:Glossary

Larry Wall: You should not take this picture to mean that linguistics is the opposite of common sense. But there are many computer scientists who have complained that it should be more like engineering and less like an art. And I disagree, but that's okay.

Main Goal

Enjoy life and enjoy the freedom of expressing yourself. Which means: support you as much as possible, and not force you in any way. Perl 6 tries to be even better than Perl 5 as your humble servant for translating your thoughts into executable code (if possible).


Every style and level of expertise has to be supported. And even more difficult: all of them have to play together well. The default often imitates a natural language (e.g., English). The following oft-repeated terms encapsulate strategies and concepts for this.



Perl's everlasting slogan: "There is more than one way to do it," meaning your way is valid, too. Just be aware of logical consequences.

Visual Metaphor

People like to see their code as a picture at first glance. Therefore names and operators should be distinctive, similar things should look similar, different things different. Larry likes to add: weird things should also look weird. And sometimes even characters can be ideograms; like the Z meta-operator, which shows visually how it works (first left then right, then next left, etc.).


This also has to do with natural attention flow. If a topic or first word of a sentence sets an understandable context for what follows, the meaning is built up word for word. This is much easier to grasp, than if the last word of a block resolves the block's entire meaning (like regex modifiers do in Perl 5). In particular, for and given are called topicalizers, because they set $_, the current topic variable.

Context sensitive

The same term or symbol might do different things in different contexts, although we have done our very best to consistently represent the same general idea. Maybe the best example is the * aka Whatever. But every context is its own domain, optimized to solve the problems of that domain.

Maximum reuse

Not only is syntax reused, to minimize the stuff you have to remember, but concepts are reused also, wherever possible. For example, Pairs are used to build hashes or named parameters in routines calls. There are plenty more examples. Maybe the biggest one: the regex engine that parses your code is the same engine you use in your program.

No special rules

Most of the special rules that plagued Perl 5 are gone or generalized.

One pass parsing

Perl 6 is much easier to understand, both for people and also for software parsers. The language is designed to be understood by machines in one read, dividing the source in smaller and smaller units. As a nice side effect: syntax errors can only damage the understanding of small units.

Keep easy things easy and hard things possible

Beside TIMTOWTDI, the other ancient slogan is "Make easy things easy and hard things possible." Even if nearly every cool idea is crammed into Perl 6, we don't lose track of the basics. Features are made as accessible and free of artificial prerequisites as possible. For example, printing a variable as a line without explicit quotes and newline (say $var), or reading a file without a file handle (slurp("filename").lines). Rule of thumb: if you can think of a concept as trivial, then it should be. On the other hand, if you can think of a computable solution, it should at least be doable in Perl (no artificial walls).

Huffman coding

This is a refinement of the last rule: common, often used things have short, straightforward names. More verbose names indicate more rare, harder to grasp concepts, or things that overwrite the default rules ("weird things should look weird"). It also implies that the defaults lean toward what a beginner (non-Perl 5 programmer) might expect ("hide the fancy stuff").

Water bed theory of linguistic complexity

This philosophy underlies the two previous terms. All Perl words should reflect logical units which can be freely combined. Making it more complicated than necessary is obviously not desirable. But oversimplification will create artificial complexity somewhere else. Like a water bed, where you can press down in one place but the water will go up in another.

All your paradigms are belong to us

We learn, take and adapt from every source possible to offer the best of all breeds. You should be able to keep your style when switching to Perl. Perl 6 supports the structured, object oriented, aspect oriented, functional, design by contract, declarative and logic programming paradigms.

Buzzword compliant

This term is an extension to the previous. Not only every programming paradigm, but also every technique or neat trick loudly marketed out there as "must have" "in the [%DATE%]", should be available in Perl 6 (or at least be possible), as long there is expressive value in it. A few examples include "named parameters", "lvalue subroutines", "parametizable subclasses" or "hygienic macros".

Second system syndrome

We are very aware that many ambitious software projects that are rebuilt from scratch fail. Especially those which aim to be "even better in all ways" successors of already successful creations. In fact, this happens so often that the term "second system syndrome" was coined. We chose this path for Perl 6 anyway, because we believe it's the only way to get a significantly better language. (Gradual improvements are flowing into Perl 5 all the time, sometimes inspired from Perl 6.) That's why the unofficial motto of Perl 6 is "Second system syndrome done right".

As a consequence of these principles, various trends can be observed.

Design Process

The initial source of the Perl 6 design came from 361 RFC (request for comments) submissions by people from all over the world. Larry Wall sorted and commented on them in several documents called the Apocalypses (meaning "revelations"). Damian Conway wrote, for each Apocalypse, an Exegesis ("explanation"), that expounded Larry's ideas. These are now all historic documents that not have changed since, because they were much harder to maintain than the Synopses ("abstracts" or "comparisons" (with Perl 5)). The Synopsis documents, along with the test suite, form the official specification of Perl 6. More details on that can be found in the history section.

The Synopses are continually edited because the more we think about the syntax and semantics, the more detailed the picture gets. The other important input comes from the implementors. They uncover cases that worked only in theory, and important corner cases not thought about before. This mutual influence of specification and implementation we call the whirlpool model of software development, which is an intended pun on the well-known waterfall model.

Design changes are usually discussed in the p6l mailing list and the #perl6 channel on the freenode IRC network.

Intro - Chapter: 0:History 1:Design 2:Basics 3:Var 4:Op 5:IO 6:Block 7:Sub 8:OOP 9:Rx 10:Meta
Overview - Appendix: A:Index B:Tables C:Cook D:Delta E:Best of F:Links G:Glossary


The Perl 6 specification requests that modules are identified by name, version and authority


The break in compatibility was mandated from the start of the project, and immediately allowed some of the changes that Larry Wall had suggested in his initial speech.


The Perl 6 design process was first announced on July 19, 2000, on the fourth day of that year's Perl Conference


Perl 6 is a major revision to the Perl programming language.

Weblog Navigation
Weblog Archives
  • Loading...

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.