Day 189 (r6253): Pictures, DrIFT(JSON, Binary, XML), MetaMod

autrijus on 2005-08-14T19:51:14

Two new pictures joined the Pugs image gallery today:

Some #perl6 folks talked about turning them into T-shirts. I only know about Cafepress and Zazzle -- any better suggestions out there?

After the Visio session, I continued refactoring and adding DrIFT instances. The -C Binary backend enables Pugs to efficiently store and retrieve PIL trees, paving the way to separate compilation for Perl6 modules.

Aankhen suggested me not bothering doing XML backend, so naturally I did it right away. Thanks to Haskell2Xml, this only took a couple lines -- see hello.xml for a sample output. However, I disabled it for now, as there are no active consumer for this, so I don't need to worry about the HaXml dependency right now.

Next in my goal is YAML. I started with the Syck emitting interface, but soon it dawned on me that JSON is a subset of YAML. I can reuse Syck as a JSON parser, and the emitter is downright trivial. Here is the output of pugs -CJSON -e "say 'Hello, World!'":

{"PIL_Environment": {"pilGlob": [{"PSub": {"pSubName": "&*END","pSubType": {"SubPrim": null},"pSubParams": [],"pSubBody": {"PNil": null}}}],"pilMain": {"PStmts": {"pStmt": {"PNoop": null},"pStmts": {"PStmts": {"pStmt": {"PPos": {"pPos": {"MkPos": {"posName": "-e","posBeginLine": 1,"posBeginColumn": 1,"posEndLine": 1,"posEndColumn": 20}},"pExp": null,"pNode": {"PStmt": {"pExpr": {"PExp": {"pLV": {"PApp": {"pCxt": {"TTailCall": [{"TCxtVoid": null}]},"pFun": {"PExp": {"pLV": {"PVar": {"pVarName": "&say"}}}},"pInv": null,"pArgs": [{"PLit": {"pLit": {"PVal": {"pVal": {"VStr": ["Hello, World!"]}}}}}]}}}}}}}},"pStmts": {"PNil": null}}}}}}}

SpiderMonkey seems to like it just fine, so I can start idly wondering about meta-programming Perl 6 with JavaScript... Mmm bad ideas.

On the MetaModel front, nothingmuch hacked the minimetamodel to support various plugins, including C3, multiple inheritance, and autolaoding.

Taking a more refactorial path, Stevan checked in MetaModel 2.0, a much cleaner implementation of the Perl5 metamodel. Following the gnostic naming convention in the metamodel picture, the files are named as genesis.pl, pneuma.pl, etc. He also added a chaos.pl that contains primitive utilities that exists a priori.

putter finished the first milestone his long journey in writing a Rules engine in Perl 6. The Pugs parser can now calls back to Prelude.pm's rx_ macros, which can then call into a Rules compiler written in pure Perl 6. He recounted some post-mortem thoughts on #perl6. It seems to me that the main takeaway is centralized version-control hinders development; switch to svk today! :-).

fglock produced Perl6::Value implementation of Num, Int, Str and Bit classes, for the Perl 5 runtime.

There's more to chronicle -- eg. my planned .il hackathon in February, but it's $work day tomorrow, so I better sleep now. See you!


Timeline Graphic

Smylers on 2005-08-14T21:06:53

Hey if you're doing T-shirts I think the previous timeline graphic (which no longer seems to be available online) with the pencils was cuter. I also liked that it had "imaginary" in parens, tantalizingly hinting that it might not actually be imaginary after all ...

Smylers

Re:Timeline Graphic

autrijus on 2005-08-15T04:36:53

Thanks, I reflected your suggestions in the new drawing.

The old graph was adapted from Simon Peytone-Jones's slides (originally talking about Haskell type classes); I didn't find a publicly-available version with high enough resolution, and I wouldn't feel comfortable uploading that to cafepress. :)