My projects are rotting. Fast.
The really big change was the transition to a new Rakudo (known as
ng) in January, of course. I was one of the people who stuck to the old Rakudo (known, retroactively, as
alpha) for the longest time, because
- at first,
alphasimply won in terms of features, and it wasn't feasible to apply workarounds to make code work in
- at some point in the middle, it was simply a relief to be coding in
alphaand not having the carpet move under me for a while;
- finally, at the point where
ngstarted to significantly overtake
alpha, it was the hugeness of the task that daunted.
So far, I've ported over GGE (grammar engine) and Yapsi (Perl 6 implementation). Projects that remain to be ported over include November (wiki engine), Web.pm (web framework), perl6-literate (runnable blog posts), pun (-n and -p flags for Rakudo), and Tardis (time-traveling debugger).
I ported GGE from
ng on and off over a long period of time. Without the test coverage I have for that project, I probably would have given up. Just to give you an idea of the amount of work it was, the changes to bring GGE from
ng can be found here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, here, and here. For those who want just the good bits already picked out, I once wrote a blog post on the lessons of porting GGE.
I ported Yapsi from
ng mainly by rewriting the whole of Yapsi over the course of a few days. The change went in as a single commit declaring that "Yapsi now has a new Yapsi". Fitting, since Rakudo now had a new Rakudo.
I've started porting Druid from
ng. I stopped because I hit some trouble which I had to work around, then hit some more trouble which I had to work around, at which point I hit some serious trouble. And it wasn't that
ng had bugs or did things wrong either, it was that Druid used aspects of
alpha (mainly in the grammar engine) that simply didn't exist anymore. I now think that Druid needs a mid-sized redesign; the old design worked under
alpha, but for
ng Druid needs something new.
It's not just the
ng transition. Last night while going by car to visit Amsterdam.pm, I picked up a two months old slides-generating script, thinking I might use it to whip up a presentation for the evening. Turned out it had a regression bug and another regression bug. This is exactly the effect the Jargon File describes as bit rot:
Instead of trying to work around the bugs in the car, I stashed two bug reports and eventually made a talk around the script instead. (And I didn't have to run it.)
Bitrot happens quickly in Rakudo applications. This basically tells me three things:
- I have more Perl 6 code than I'm currently able to maintain.
- As much as I like tests and try to write tests, I have too few of them.
- For some time, I've been dreaming of a nightly tester. It's really getting to be time to write it. With a bit of luck, it would help discover and alleviate bitrot.
It could perhaps be seen as a tad ironic that in wanting to help create a tool chain for Perl 6, I have instead fallen victim to the lack of it. Oh well; live and learn.