When last we left off, Plumage had just managed to install its first project, thus moving from the "infant" to "toddler" phase of development.
In preparation for reaching "preschooler" status, I spent time this week removing some hackishness and making Plumage generally smarter about basic operations. Some of the changes were very simple, such as always printing out system commands to be spawned before actually executing them, or pushing some boilerplate code down into utility functions rather than forcing every calling site to go through the same contortions.
Some changes were infrastructural, including basic utilities like
does() and workarounds for NQP limitations. The latter category included new functions such as
try(), which Tene++ and I added to
Glue.pir to make calling convention mismatches a bit less painful.
Other changes were larger, such as adding command line option handling, allowing the user to ignore failures in various build stages, and handling exceptions thrown by Parrot ops and low-level Parrot libraries. Handling (possibly several) config files (including merging the config information across them) and moving all project builds to a separate location -- defaulting to
~/.parrot/plumage/build/ -- also fell into the "larger changes" pile.
Still others amounted to cleanup and general code maintenance, such as compiling
Glue.pbc during the
plumage build so that all libraries could be directly loaded as pure bytecode at runtime, finding less hackish ways of working around NQP, and cleaning up documentation and comments throughout.
Finally, darbelo++ added a new project (partcl) to the metadata collection; I hope to add a few more in the next week or two.
All in all, no major new milestones reached -- but the code feels a bit more solid now, behavior is "more correct" in several places, and the user experience is definitely better. Not a bad week's work.
As always, you can check out the code at the
Parrot Plumage repository,
and don't hesitate to ping me on IRC -- I'm
irc.parrot.org. If you'd like to join the effort, read the
README for the general overview, then come to
#parrot to get your questions answered!