Nicholas Clark is the pumpking for the stable branch of Perl. In the past few years, he’s released Perl versions 5.8.2 through 5.8.8. He was also the pumpking for Ponie until recently. He recently answered @questions[0 .. 10].

How do you describe yourself to the Perl community?

They don’t seem to ask for a description — maybe they don’t even notice me. I guess I’m one of the volunteers working diligently in the background, who does a job sufficiently reliably that they almost never get noticed.

You recently announced a holiday from your work (or so it seemed). Now you’re back patching Perl 5 like a madman again. How’d that work out?

Well it was more that I was having a break from work of all sorts, paid and unpaid, and wanted the freedom of having no-one expecting anything specific from me. In particular, I didn’t want anyone assuming that because I was nicely “copious free time enabled” that this meant I had plenty of time to volunteer to fix their project for them. It seemed to work quite nicely — no-one tried to cajole me into anything, and I got some things done, Perl and not Perl, that had been stalled for quite a while.

But now the break is over, and as I’m being paid by a TPF grant to work on various parts of the perl core full time, it has this side effect that I’m generating lots of patches to Perl 5. So right now for the first time ever I’m not being a volunteer working on the Perl 5 core, although apart from 6 specific items I’m not being paid for the work of creating the next stable release. I suspect that I might be a little too “madman” currently, as I’m starting to feel that I’d like another break after I finish in a couple of months.

Perl 5’s implementation has a reputation for being arcane in places. Yet in the past year there have been several rounds of refactorings, from Andy Lester’s small style patches to larger infrastructure changes prompted by your work on Ponie. Is Perl 5 better now? Is there a long way to go? Are these changes making life easier for the porters?

It’s better. I’m not sure how much further there is to go that is unambiguously useful, rather than just stylistic changes that are more about opinion. It’s hard to tidy up C that’s as portable as Perl 5 — few other programs this complex run on pretty much every platform out there from handhelds running WinCE to mainframes running z/OS.

One specific criticism that I’ve heard is the perl core is arcane and hard to follow because it makes excessive use of macros, which conceal the underlying C code and add another layer you have to learn before you can make sense of what’s going on. Like most things, this is valid, but it’s not the whole story. There is a logical pattern to the macro names, and the consistent use of macros in the C code has meant that it’s been possible to make significant structural changes to parts of the Perl interpreter for 5.10, whilst maintaining full source code compatibility with all the XS code out there on CPAN.

Do you you ever get a chance to write Perl code instead of perl code? What do you write when you do?

Not enough really, and in my past few jobs I seem to have been caught up down in the bowels of things rather than writing completed applications or packagable components of them, with the result that my CPAN directory seems to have rather more Acme modules than anything else. The most fun piece of Perl code I got to write was at the BBC, where I did a contract for them to write the script that aggregated search results from various sources and fed them to templates. I thought that the completely non-blocking select driven socket code was beautiful and fun, running on any Perl as far back as 5.004_04, but sadly as an end user you never get to see it.

What non-code things have you learned from being a pumpking?

More people should read how to report bugs effectively by Simon Tatham.

There aren’t enough active volunteers to go round.

Releases take a surprisingly long time to get right — there’s a lot of last minute faffing that seems impossible to automate, delegate or avoid.

You get taken for granted — in particular no-one seems to give a moment’s thought to the fact that they’re expecting professional quality results at amateur prices.

If you had a month of free time and could not use a computer for the entire 30 days, what would you do?

Well, if I had the means and the money, I’d like to go for a cruise on a narrow boat around Britain. I find it very relaxing way to have a holiday, and if it rains I seem to get a suntan, which is always amusing when people ask which exotic place I’d been to, and my answer is somewhere unexpected such as “Dudley”.

I’d plan to start and end somewhere around Limehouse Basin (east London), with the first leg being sailing up the Thames, under Tower Bridge, past the Houses of Parliament, through the centre of London. I’d certainly want a mentor for that part, and I doubt regular boat hire companies would agree to such a route, as it’s somewhat risky taking a boat 7 feet wide with a 3 foot draft up a fast flowing tidal river that sometimes sees ocean going liners. Strictly no drinking on that leg of the journey — at least nothing stronger than tea.

As an aside, you know you’re not a tourist when your reaction to seeing Tower Bridge opening is “drat, I’m going to miss my train again”. But it’s one thing seeing Tower Bridge open for any old ship, and another thing seeing it open completely to let a liner squeeze through it — well worth missing a train or two to see. Although possibly stranger visitors to the Pool of London than the cruise liners are the foreign military vessels – it seems somewhat incongruous to invite another navy’s ship within easy shelling distance of one of the world’s major financial centres, and less than a mile downstream from all the government buildings.

What other open source and free software projects do you watch? Why?

Outside of the Perl world I’m really not tracking that much actively. I’m subscribed to Debian Weekly News, which I find an interesting read, particularly the section summarising new vulnerabilities. I also browse the gcc web pages every so often to see what new excitement they have in store for us.

I’m impressed by the rise of Ruby on Rails. I’m hoping that it will act as a wedge, to force apart the blocks in some people’s minds that try to partition “scripting” languages from “proper” languages, and the marketing driven assumption that you can only sensibly develop solid, well engineered applications using “proper” languages and many layers of enterprise grade middleware. Rails shows that agile test driven development using an interpreted language is often a faster, more flexible, and simply better way to do things, and I’m hoping that the enlightenment this brings will rub off onto the perception of the suitability of all interpreted languages for tasks outside their traditional niches, rather than being the start of an internecine war between the interpreted languages about which one is the best and only right choice.

What does your development environment look like? BSD? Linux? Vim? Emacs?

Well, it seems to be emacs and xemacs running on colocated Unix boxes belonging to other people, who very kindly give me shell accounts. I hope that this it the laziness that is considered a virtue, because I certainly find it very convenient not to have to worry about actually administering machines or keeping them secure from intruders. Fast machines are useful, because the core regression tests take several minutes to run, and having several fast machines to chose from, or use in parallel, even more so.

Sadly I no longer have access to AIX, which is a shame, as IBM’s compilers were some of the most exacting in picking up what isn’t quite genuine, and therefore portable, C. Even if sometimes using it make me think “AIX is pain, Highness. Anyone who says differently is an IBM salesperson.”

I find MS Windows desktops frustrating, especially if they’re only being used run terminals or X servers to access accounts on Unix machines. Things like “I click on the floppy disk icon. Will it open a new explorer window to show me the contents, or pick an existing one and re-use that?” I never good work out the logic, and I’m not convinced that there was any. Fortunately I’ve managed to have a unix desktop at @work for almost seven years now, although I’m not sure if I’ll be able to keep it up forever. My favourite window manager still seems to be fwvm2, with the main menu being “xterm” and “quit”. I’ve tried KDE and Gnome, but it felt like the eye candy was stealing the CPU from actually getting real work done. I guess I’m just a Luddite at heart.

What’s the evilest idea (with regard to code, not actual evil) that you’ve ever had but haven’t done yet? Why not?

Er, tricky. The problem is that I don’t seem to come up with that many things that I consider too evil to implement. I actually wrote code that implemented a state machine by jumping sideways between subroutines using goto & syntax. It worked very nicely, so that definitely doesn’t count. It’s like I’m sitting here machinating about hacks to extort “ONE MILLION DOLLARS” when the rest of the world is trading sloppy practices that create billion dollar extortion rackets.

Even after several days the only thing I can think of was an idea to split the over large “enter subroutine” operator code in Perl 5 into two; one just for XS subroutines, one just for regular subroutines, with code in each to check that the subroutine hadn’t been redefined, and if it had rewrite the optree and jump sideways to the other. I guess it can’t have been that evil because no-one objected when I added it to the perl TODO list. But it can’t have been that good either, because no-one’s tried to implement it yet.

If a handful of readers were to read this interview with spare time and the desire to help you out, what could they do and how could they get started?

There is a TODO list of tasks that could usefully be done on Perl 5, which is part of the documentation of each release, and can be read with perldoc perltodo. The suggestions are grouped by difficulty and skills needed, starting with things that could be done purely in Perl, through to tasks that really need a good knowledge of Perl, C and how the internals work. However, thanks to TPF, I’m knocking off quite a few of the more complex tasks, so it’s probably best to read the current development list. If anything seems interesting, then mail the perl developers at perl5-porters@perl.org for more details, and to check that no-one else has started on your task of choice.

If they have computers with more space time than they have, they might like to consider helping run nightly perl smoke tests [with Test::Smoke], particularly if they are platforms more esoteric than x86 Linux. This lets us rapidly catch problems in the development branch, before they ever make it to a release candidate, let alone a release.

And if they have none of this, just dropping a quick message to perl-thanks@perl.org explaining why you use and enjoy Perl is really appreciated by the Perl developers. With almost all user feedback being bug reports, it always nice to have something that isn’t requesting investigative work to commence. Maybe we should also ship a perlthank tool to complement perlbug :-)

If Perl 6, Ponie, Punie, and Cardinal were here today, which one would you use most and why?

Whichever one got my job done most easily. Punie, being an implementation of Perl 1, doesn’t have lexicals or strict, so I doubt that I’d want to use it for programming in, although it might use it to see how its implementation works, if I need to write a new language to target Parrot. Ponie brings you all the benefits of the Perl 5 syntax (positive and negative), apart from the benefit of Perl 5 being already installed on more systems than any other scripting language. (Or is considering using classic Perl 5 thoughtcrime for this question?)

Given that I’ve not yet had cause to learn Ruby and I’m being given the option of Perl 6 or Cardinal, I still doubt I’d have cause to learn Ruby, as Perl 6 seems to be incorporating all the best parts of Ruby.

So I think Perl 6, given that it’s into wholesale language flattery, by imitating the best parts of many other languages, including languages you didn’t even list.