This took longer than I expected, but the draft of the Modern Perl book is available for review. I'm especially interested in hearing from people who don't consider themselves expert Perl 5 programmers. The goal of the book is to explain how Perl 5 works (and how to write Perl 5 effectively) to help novices become adepts.
My progress and communication about the Test::Builder2 grant has been nothing short of appalling. There is a sort of herky-jerky progress where I figure out a design problem, push the code forward, then remember a use-case that throws a wrench in the whole design and the whole thing comes to a screeching halt again.
At the QA hackathon we elegantly solved the problem of things like die-on-fail and Test::NoWarnings but then ran afoul of things like Test::Warn and Test::Exception which runs tests inside of tests but those aren't actually part of the test stack.
Confused? I'll post more about it another time. Point is, TB2 continues to move forward, its just that there's long periods of rumination between sprints of development. And I get distracted by other projects. At this rate I'll be collecting Social Security before I collect the second half of the grant. I really want TB2 to happen, but something decisive has to be done. I work best with hard deadlines, so the plan is to clear a month for working mostly on TB2. A lot of the wibbling is trying to come up with the most elegant solution, but I usually have a less than elegant way to solve it and move forward. If its between an elegant TB2 that doesn't exist and a less elegant TB2 that does, well, go with the one that exists. With the way my schedule is looking, that will probably be mid-August to mid-September. If that doesn't produce an alpha, then I'll kill the grant.
That doesn't mean TPF gets nothing for your money. Chunks of TB2 can be harvested to improve TB1. Specifically, the TB2 formatting and history objects. The TB2 formatter makes the guts of TB1 cleaner, and it also allows it to produce something other than TAP. Used together, history and formatter allows non-Test::Builder based test frameworks to work together with Test::Builder providing even more flexibility. This is already done in the TB2 branch.
Looking at the grant deliverables, most of it is done:
* Split up global shared Test resources into individual objects
* The test counter
* The output filehandles
* The plan
* Allow hooks for global beginning and end of test functions.
* Ensure multiple hooks "stack"
* die on fail
* debug on fail
* Hooks for global beginning and end of test actions
* Example: A safer Test::NoWarnings
* Example: Don't cleanup temp files on failure so they can be debugged
* Allow for test output other than TAP
* Allow another Test::Builder-like module to work in the same process
as Test::Builder (for example, sharing the counter).
* Rewrite Test::Builder in terms of Test::Builder2.
Here's what's not complete:
* Split up localizable behaviors into objects
* Allow individual test modules to locally override Test::Builder2 behaviors
* Allow test modules to globally override Test::Builder2 behaviors
* How the plan works
Since I'm not writing to the letter of the law, there's more than that to be done before release, but the project does move.
I spent most of YAPC::NA mildly sick, sleep deprived and writing talks. Each of those things alone isn't so bad, but put all together meant I had time and energy enough to do my talks, discuss with people after, and that's about it. As a result, I was kind of dead in the head most of the time and didn't do a whole lot of interaction with people. I didn't feel like I got the most out of the one opportunity a year I get to hang out with huge gobs of Perl folk.
One of the things which I wanted to do at YAPC was get gitpan restarted. It can run right now, but the code is a mess and needs to be babied. It needs a rewrite. That rewrite was supposed to happen at YAPC but see above. I'm doing that now, using MooseX::Declare, perl5i and Path::Class just to mess around with them seriously. Also log4perl, which I'm finally learning a decade late. Its fun, far more pleasant than knocking it together without, once you learn to cope with Moose's idiosyncrasies. Better to learn the quirks of one complete system than nine incomplete ones.
That's what's absorbing my time right now. After that I want to add subroutine signatures to perl5i and the über file and directory objects. They were supposed to be in, at least as a prototype, by YAPC but that didn't work out. Using MooseX::Declare, Path::Class and perl5i together has me drooling for them.
Will Coleda, representing the TPF, found me at YAPC and mercifully did not break my legs. We hashed out a plan to make a last stab at Test::Builder2 before calling the grant done. That's not going to happen until August, I'll post about that later.
Oh, and I have a talk to do at OSCON about how the world is going to end in 2038 assuming 2012 doesn't claim the prize first. And a two part Git tutorial for Drupal programmers that I'm developing into a commercial class. And two paid clients to keep happy.
One thing I *don't* have to worry about is MakeMaker. Gird your loins, MakeMaker has provisionally been handed off to Matt Trout. Maybe I need to worry about it more...
The Perl 6 design team met by phone on 16 June 2010. Larry, Allison, Patrick, Will, and chromatic attended.
Larry:
TOP (again), and explained how parsing is initiated and how it actually works...) now picks a monotonic function when using single characters as endpointsprotos as well as onlyssub() declarationAllison:
Patrick:
Associative and Positional rolesc:
The Perl 6 design team met by phone on 09 June 2010. Larry, Allison, Patrick, and chromatic attended.
Larry:
gather/take gimme5's limitations.<_from> and.<_pos> hash lookups to using.from and.pos accessorsEXPR out of STD to make it generally available to any grammar wanting operator precedence$< detection have a longer token to avoid confusion with match variablesinfix_circumfix_meta_operator >>R~<< correctly, or at least dwimmilyprintf formats like "%{$count}s" /m and/s with the opposite semanticstermish now localizes $*MULTINESS in its scope so that inner declarations aren't accidentally multifiedpackage Foo; as a Perl 5 constructAllison:
Patrick:
exit opcode** quantifier in regexes to understand surrounding whitespacec:
The Perl 6 design team met by phone on 02 June 2010. Larry, Allison, Patrick, Will, and chromatic attended.
Larry:
viv instead of gimme5 Blobs to simply be immutable Bufs, with similar generic characteristicsblob typesBEGIN and use, since those can't wait for end of file$*GOAL variable only as informative, never as a "stopper"<stopper> rule for $*GOAL if necessary$*GOAL viv work besides thatAllison:
Will:
Allison:
getstderr and related opcodesWill:
Patrick:
c:
The Perl 6 design team met by phone on 26 May 2010. Larry, Allison, Patrick, Will, and chromatic attended.
Larry:
:() syntax is now always signaturefoofix:[...] as the general op form instead of foofix:(...) :nth and:x :nth() now only ever takes a monotonically increasing list!= and ne if could terminate one statement and start another\s etc and reject \u etc:() on name extension as a signature always, never as a categoricalAllison:
Will:
Patrick:
eval c:
The Perl 6 design team met by phone on 19 May 2010. Larry, Will, and chromatic attended. Patrick added his notes later.
Larry:
~~ topicalizes, and removes smartmatch table fossils that automatically fall out from that:a and:aa changed to:m and:mm :samecase and:samemark mm// to ms// to avoid confusion with new:m ignoremark option??!! constructs of various sortsCORE.setting now has protos of all the operators so they can be recognized as subs tooStr $toto' to intuit missing declaratorWill:
c:
Patrick:
The Perl 6 design team met by phone on 12 May 2010. Larry, Allison, Patrick, and Will attended.
Larry:
@foo[] into regex1__3 minmax function to CORE.settingcircumfix:«X Y» as grammar derivation >> insidefoofix:("\x[face]") and foofix:("\c[YOUR CHARACTER HERE]") without actually evaluatingyaml out of gimme5, since viv is not likely to go that route.Patrick:
Allison:
Will: