/usr/local/CPAN/Perl6-Pugs/02Architecture.pod
Pugs Apocryphon 2: Architecture
- Reason of Pugs
- make Perl 6 programs run
- Explain the Perl6 parts more; assume no Haskell
- What is the difference between how Perl 5 and Perl 6 runs programs?
- Separate parse/compilation/runtime phase
- What does the Parser do?
- match the source with regexes defined in Perl 6 Grammar
- which is just a set of regexes to match language parts
- does not check "1=2" or any other compile time errors
- either parses into syntax tree, or report syntax error
- the syntax tree may be completely bogus
- What does the Compiler do?
- decide the "meaning" of syntax trees
- translate various special forms into the same underlying operations
- What is "PIL"?
- Pugs Intermediate Language
- very few node types
- Verbs: Apply (function call), Assign, Bind (give new name)
- Nouns: Literals, Expression
- expression: inline assembly, variables, thunks, code
- (explain the PIL forms more, with examples)
- Why "PIL"?
- doesn't care how program was "written", only what it "means"
- Don't program in PIL because it's very verbose
- But it represents anything Perl programs can do
- It only has five operations (also known as "nodes")
- The PIL evaluator
- At this moment is the reference implementation of how Perl 6 works
- Will eventually be written entirely in Perl 6
- Will be one of the many backends in the end, among Parrot, Perl 5, and others
- The Code generator
- translates PIL operations into target languages
- the underlying language still have to provide a runtime and builtin functions