Interviews Partners

A Chat with Jonathan Worthington, Creator of Comma, a Perl 6 IDE Built on Top of the IntelliJ Platform

In this interview we speak with Jonathan Worthington (@jnthnwrthngtn), Edument team member and creator of Comma IDE. Comma is an Integrated Development Environment for the Perl 6 language, built on the IntelliJ Platform.

Jonathan Worthington

Welcome Jonathan. Could you please tell us a bit about yourself and your role at Edument?

I started at Edument in 2010, as the first employee. I spent my first five years at Edument working in Sweden, doing a mix of teaching and consulting. These days, I’m living in Prague, and have started a new Edument office here. I’ve been taking a much-needed break from teaching and have been enjoying focusing more on consulting and building products.

A few years before joining Edument, I got involved with Perl 6 development. Back then, there was a lot of skepticism over whether the language would ever reach a stable specification and a production implementation. I’d been especially interested in compilers, runtimes, concurrency, and language design during my time at university. Perl was at the heart of my first business, started when I was a teenager, and I delivered numerous web application projects using it. So, helping with Perl 6 felt like a nice way to give back to the community that had freely given me a tool that I used to make a living for many years.

And what a ride it’s been! Not just in that I came to play a key role in delivering the language and implementation, but every bit as much for the people I’ve had the pleasure to work with along the way.

What is Comma IDE?

Comma is an Integrated Development Environment for the Perl 6 language, built on the IntelliJ Platform. We recently opened an early supporter program, so those who are keen to have a Perl 6 IDE and to support its development can get their hands on BETA releases right away. Already Comma has a nice range of features for Perl 6 developers – and of course, we’ve lots of plans and ideas that we’ll be developing over the months and years to come.

Why develop an IDE for Perl 6?

Because I wanted it, I felt Perl 6 needed it, and I believed there was a market for it.

Perl 6 had a long gestation period, but the resulting language is well worth the thought and experimentation that went into its creation. I appreciate Perl 6’s careful static/dynamic trade-offs, its concurrency and text processing capabilities, and the ease with which a program can be evolved and refactored. The language has a lot to offer.

However, there’s more to a language than a specification, compiler, and runtime library. The ecosystem around it is also essential. The availability of libraries and tools plays an important role in language adoption. Some developers work happily and productively without an IDE, by creating a developer experience that works for them out of many small tools. Other developers really want the development experience that an IDE offers, and without one, they will be reluctant to use a language. The integration an IDE offers can also be valuable to new language users.

Listening to the steadily growing Perl 6 developer community, I sensed there was already a reasonable amount of demand for a Perl 6 IDE. So, I assembled a team at Edument and we set about building it.

What advantages does Comma IDE provide over other editors?

Comma is the first Perl 6 Integrated Development Environment. While one can put together a decent Perl 6 development environment centered around other editors, Comma provides a curated experience out of the box.

Furthermore, Comma parses and builds up a rich model of the program. This not only allows for accurate and detailed syntax highlighting, but also supports code analysis, navigation, and – in the upcoming release – refactoring, all of which go beyond what other editors offer Perl 6 developers so far.

Was this your first time building on top of or extending the IntelliJ Platform?

No, although it was the first time building an IDE rather than a plugin. Several years ago, an Edument colleague and I took on an IntelliJ IDEA plugin development project for a customer. While we were both new to the IntelliJ Platform, we had a good deal of compiler experience, which made it relatively easy for us to get productive and build useful things.

Since then, we’ve had a number of further IntelliJ-based projects. Unfortunately, they were all under NDAs and we couldn’t say much about them – so it’s a relief to finally have a product built on the IntelliJ Platform that we can talk excitedly about!

What did you like about the IntelliJ Platform?

It only took me a few days working on IntelliJ plugin development to realize that, at some point in the future, I really wanted to build a Perl 6 plugin or IDE atop of the platform.

I immediately liked that the platform values building up a really good, detailed, model of the program, and through that enabling a great range of valuable analyses and other features. With time, I was also impressed by how the core model generalized over a range of languages, without feeling like it was trying to pretend they were all the same language. And, last but not least, I liked that plugin development was a first class citizen inside of IntelliJ itself.

What were the main benefits of building on the IntelliJ Platform?

Building an IDE from scratch would be a huge undertaking. We simply couldn’t have brought a product to market if we had to start from scratch. Building our IDE on the IntelliJ Platform meant that we could focus almost all of our energies on building a really good Perl 6 development experience, without having to worry much about the language-agnostic features that every IDE should have.

It was also important to us that the platform core source code was open, so that we could dig as deep as we needed to solve any problems we ran in to. Additionally, we knew that to get a really good parse of Perl 6 meant that we needed to build a custom lex/parse engine that worked in terms of Perl 6’s grammar language. The IntelliJ Platform has the flexibility to let us do that.

Last but not least, the vision for Comma is a tool that can do interesting analysis of the code and perform smart refactoring. The IntelliJ Platform is well aligned with that vision.

Did you evaluate other platforms?

Yes. I was already pretty keen on the IntelliJ Platform, from previous plugin projects. However, I understood that building a Perl 6 IDE was a big investment, and so we’d really better make the right platform choice. Some of the platforms based around web technologies were interesting to consider. However, in the end the IntelliJ Platform felt like it was in closest alignment with our product ideas, and our previous experience with the platform was a big plus for us too.

What could be improved for IntelliJ Platform developers?

The IDE building experience is somewhat less well catered for than the plugin development experience, although given the ratio of plugins to IDEs, that’s quite understandable.

What’s next for Comma?

We’ve already got lots of useful feedback from our early adopters, and addressing that is a priority for us at the moment. We will also be pressing forward with implementing many further inspections, various refactoring tools, greatly improving debugging support, and integrating profiling too. We will also provide some features dedicated to building web applications and services using Cro, a set of libraries for building distributed systems in Perl 6.

Do you have any recommendations or tips from those who want to build on top of the IntelliJ Platform?

Get good at exploring the platform and IntelliJ/PyCharm Community source code. Stepping through it in the debugger to understand how pieces fit together than be really informative. When trying to work out how to do something, the wealth of existing plugins is also a great source of inspiration. It’s a huge platform, but a huge amount has been built on it, and so there’s plenty of examples out there.

Thank you for your time Jonathan and good luck with Comma! To learn more about Comma IDE visit: https://commaide.com/

image description