Strangely Consistent

Musings about programming, Perl 6, and programming Perl 6

To take arms against a sea of bitrot

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

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:

Hypothetical disease the existence of which has been deduced from the observation that unused programs or features will often stop working after sufficient time has passed, even if `nothing has changed'. The theory explains that bits decay as if they were radioactive. As time passes, the contents of a file or the code in a program will become increasingly garbled.

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:

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.