Paul Bone

About Me

I am a talented software engineer and computer scientist. My specialties include programming languages, declarative programming, programming language implementation, performance profiling, analysis and optimisation, parallelism and concurrency. I write about these topics on this blog.

I work for YesLogic where I contribute to the open-source Mercury programming language and work on our product, PrinceXML. In my spare time I work on the Plasma programming language.



I started programming when I was 12 with QBasic, by the time I was 15 I was teaching myself C/C++. After high school I studied computer science at University then joined the work force full-time. Shortly afterwards I was introduced to functional programming; intoxicated by the safety of pure declarative languages and the challenge of multicore computing I decided to peruse a Ph.D. on this topic.

After completing my Ph.D. on Automatic Parallelisation for Mercury I re-joined the work force supporting Mercury in production. I use the skills developed during my Ph.D. to analyse and improve the performance of Mercury programs.

In mid-2015 I started work on the Plasma programming language in my spare time. Plasma is a pure declarative language. Its goals are to find a compromise between declarative and imperative programming and to provide state-of-the-art parallel and concurrent programming features.

When I'm programming or writing, reading or thinking about programming I like to spend time with my family, go alpine skiing and sometimes play the flute.

Recent blog posts

— Tail Recursion, do I have it? how to get it?
We're introduced to tail recursion early in our functional programming journey. But it is well worth revisiting for the seasoned or advanced functional programminer, it can be more subtle than you know.
— Back in the USA
I took a trip to the USA for a job interview and also took a look around San Francisco.
— More about Memory Fragmentation in BDW GC
This is a follow up article about memory fragmentation. I show how heap usage and utilisation changes over time for Prince and demonstrate the kind of information that can be extracted from BDW GC without too much effort.
— How to Allocate Memory — Code Generation
How do you generate code that allocates memory? This isn't about memory management algorithms, or language design concepts. But how to translate Plasma code that allocates memory (like use of a data constructor) into PZ abstract machine code.
— Explaining GADTs
In this article I work through a problem that can be solved elegantly with GADTs

See all blog posts.


Presentations and interviews

The publications of this section include conference presentations, talks and other interviews. They are not academic / peer-reviewed, however they're probably more accessible for most readers. They're probably a good place to start for an overview of my work or reporting on other people's work.

Journal articles and conference papers

The publications in this section are academic papers (conference papers, journal articles and dissertations. They are more academically rigorous than the presentations above and have a lot more detail. They're useful if you're looking for detailed information about my work.