So I'm back asking for more questions. :-)

I'd like thank to everyone who have contributed questions in the previous thread; I have sorted through all general (high-level, not-terribly-technical) questions and produced Pugs Apocryphon 1, which hopefully answers some of them.

Next month I will produce PA02, which is intended to be a technical walkthrough to the Pugs source tree and internals, including plans for future extensions like NCIs. As such, I'd like to solicit questions regarding the Pugs implementation here.

Like in the previous thread, it is okay to ask other questions -- e.g. what drug I am on (the answer is caffeine, via Diet Coke) -- and I will try to answer all of them in the coming Apocrypha documents.

Thanks!
/Autrijus/

  • Comment on Pugs Apocryphon 1 out; technical questions wanted

Replies are listed 'Best First'.
Re: Pugs Apocryphon 1 out; technical questions wanted
by Mugatu (Monk) on Feb 26, 2005 at 00:09 UTC
    I must say, this is very encouraging! I know there has been a lot of work on the Perl 6 backend, by way of Parrot, but it's nice to see some actual Perl 6 code up and running.
Re: Pugs Apocryphon 1 out; technical questions wanted
by pernod (Chaplain) on Feb 26, 2005 at 17:54 UTC

    I read the first Apocryphon and want to ask some questions that will expose my ignorance of the Perl 6 design process, and the fact that my compiler theory is somewhat rusty:

    How does Abstract Syntax Trees (AST) work? Why are they useful? Is it possible to explain these in sentences with words containing two syllables or less?

    I am so impressed by the work being done on Pugs. Keep up the good work!

    pernod
    --
    Mischief. Mayhem. Soap.

      Thanks for your words of encouragement. :) You can see a simple AST by running:
      % perl -MO=Concise -e 'print "Hello, $world!"' a <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v ->3 9 <@> print vK ->a 3 <0> pushmark s ->4 - <1> ex-stringify sK/1 ->9 - <0> ex-pushmark s ->4 8 <2> concat[t3] sKS/2 ->9 6 <2> concat[t2] sK/2 ->7 4 <$> const[PV "Hello, "] s ->5 - <1> ex-rv2sv sK/1 ->6 5 <#> gvsv[*world] s ->6 7 <$> const[PV "!"] s ->8
      Compare it with Pugs (using r317 on svn.openfoundry.org, with some indenting):
      % pugs -c -e 'print "Hello, $world!"' { Statements [( App "&prefix:print" [App "&prefix:~" [App "&infix:~" [Val (VStr "Hello, ") ,App "&infix:~" [Var "$world" ,Val (VStr "!") ] [] ] [] ] [] ] [] ,"<interactive>" (line 1, column 1) )] }

      That should give you a pretty good idea of what an AST is. :)