title | author | created |
---|---|---|
To take arms against a sea of bitrot |
Carl Mäsak |
2010-10-07 00:19:00 +0200 |
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,
alpha
simply won in terms of features, and it wasn't feasible to apply workarounds to make code work inng
; - at some point in the middle, it was simply a relief to be coding in
alpha
and not having the carpet move under me for a while; - finally, at the point where
ng
started to significantly overtakealpha
, 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 alpha
to 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 alpha
to 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 alpha
to 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 alpha
to 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 alpha
-to-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.