July 22, 2024

Vim Creator Bram Moolenaar’s Forgotten Programming Language, Zimbu

Vim Creator Bram Moolenaar’s Forgotten Programming Language, Zimbu


Site reliability engineer Jan van den Berg remembers Vim creator Bram Moolenaar as “a hyperintelligent, dedicated, and selfless human-being.” In a recent blog post, van den Berg fondly described how the text editor’s creator “worked on Vim almost daily for over 30 years. Constantly tightening and improving it. An almost unprecedented achievement. A true labor of love.”

With the news of Moolenaar’s death at age 62, fans around the web shared their memories of a life lived, and all the joys and triumphs that came with a life of coding. But among the remembrances was the appreciation for one of Bram Moolenaar’s own personal projects. Moolennar experienced a rare privilege known only to a few: designing his own programming language. On social media sites, fans shared a 2014 video of a talk where Moolenaar shared his creation — a custom-crafted programming language called “Zimbu.”

The video offers a chance to see him in action — the man behind Vim, addressing a small but interested audience… But it’s also a chance to see what a programmer dreams about.

And what would happen if someone tried to map all of the frustrations from the daily lives of coders onto a new and improved programming language?

Making Coders More Productive

Moolenaar named the language “Zimbu” after a lesser-known Dilbert character — a programming monkey who was extra productive because it was able to move the mouse with its tail. (The language’s mascot was a monkey.)

Among Zimbu’s goals? Remove clutter to make code easier to read (since it’s read more often than it’s written). Zimbu’s trademark feature was the way it let coders omit the opening curly brace around a block of code. (“It looks a bit weird maybe, at first…” Moolenaar acknowledged to the audience. “Get used to it. It will work out fine.”) And parentheses are also optional around the conditions for an “if” or “while” statement…

To reduce clutter still further, semicolons are optional. (Though you can use them if you want to include more than one statement on a single line.) “You need a good mix of words and punctuation,” Moolenaar told the audience. “If you only have punctuation, you can’t see anything. If you only have words, like in Cobol… It’s hard to read, actually…”

It was October of 2014, at an annual open source event in the Netherlands called T-DOSE, when Moolenaar shared his vision. With all of our coding experience, “We have learned what works well and what leads to doom,” Moolenaar joked in the talk’s description. It adds that Zimbu was designed to help coders be productive “from experience, instead of using some academic theory or the hot fashion of the year.”

So Zimbu had both static typing and dynamic typing, along with garbage collection (so “you just don’t have to worry about memory management.”) There was multi-threading with asynchronous communication. Zimbu also delivered the extensibility of object-oriented programming with more flexible language concept mixins.

To reduce clutter even further, objects are indicated with the dollar-sign sigil (in place of the word “this”). “The basic experience is if you write code that’s shorter, it’s easier to read,” Moolenaar said at one point. “It’s easier to understand. So shorter is better…”

It was all Moolenaar’s answer to a fun hypothetical: if he were re-writing Vim from scratch, what kind of language would he want to use?

Bram Moolenaar – 2014 T-Dose talk on Zimbu (screenshot via YouTube)

Zimbu was even designed to be portable — to be used everywhere, even in the browser. To that end, Moolenaar had crafted the Zimbu Web Toolkit, so that both the server and client code could be written in Zimbu. (The compiler then generates binary code for the server and JavaScript for the client — and puts everything in the right place so they can communicate.)

And of course, there were some other improvements along the way.

 Java naming inconsistencies - Bram Moolenaar - 2014 T-Dose talk on Zimbu (screenshot via YouTube)

“If there’s inconsistencies in the language… it slows you down,” Moolenaar told the audience. You end up looking at the documentation, Moolenaar said.

Later one slide also warned that today, “programs appear to be written in a secret language,” advocating for plain-English words (like list instead of “arraylist”). Java famously had four types of integer — byte, short, int, and long — depending on the length of the value to be stored (and how many bytes would be needed to store it). Moolenaar’s Zimbu language just calls them all ints, and then specifies the byte length at the end of the type. (int8 int16 int32 int64)

And while Java has to maintain backward consistency, “If you start something new, you can clean it up.”

Towards the end of the talk, Moolenaar began sharing his biggest ambitions. (“I basically want to build testing into the compiler. I don’t see testing as a separate tool. I want to support writing tests easily in the compiler itself” — and so the compiler could handle test code differently) The Zimbu language also had compiler plugins (defined with a simple import statement) so “if there’s a feature you don’t have, you can add it yourself.” (Moolenaar described them as “tools that can take any kind of file and produce Zimbu code.”)

But in the end, Zimbu’s most distinctive feature was its use of capitalization. Reserved keywords were always written in all-uppercase letters. “It’s a bit hard to type, but at least you can always add new keywords, because nothing else is in all caps.” Built-in type names like string and list were all lowercase, while user-defined types must start with an upper-case letter. And user-defined functions have to start with a lowercase letter. This makes it impossible for a user-defined function to conflict with a built-in function.

What Happened to Zimbu?

The slide ended with a status-of-Zimbu slide which included a telling bullet point: “Number of users: 1.” (“Which is me…” Moolenaar told the audience. “But maybe it’s about time I get some feedback from other programmers.”)

Ireland-based open source developer Martin Tournoij was in the small audience that day, and remembered Moolenaar’s willingness to stop and engage the audience. “At some point, I must have given a bit of a skeptical look, and he promptly looked at me and asked ‘oh, you don’t agree? Why not?’” Tournoij posted in a comment on Hacker News. “We spent some time talking during the rest of the day and the next day; we discussed and joked about lots of things; I don’t recall talking much about Vim: it just didn’t come up. I found him a very friendly, warm, and likeable person.”

Reached for comment, Tournoij said he doesn’t know the status of Zimbu today. “I suspect Bram just lost interest in Zimbu, at least temporarily, and other things caught his interest, as part of the normal drift of interests that people have — e.g. he started spending more time on Vim starting in 2015 or so…  Also Vim9Script probably plays a factor: a lot of the ‘language design creativity’ probably went into that, rather than Zimbu. I recall Bram mentioning ‘I enjoy working on this kind of thing’ (that is, designing a language, Vim9Script in this case).”

The language was clearly important to Moolenaar. In his messages to various Vim mailing lists over the years, the second-to-last line of his .sig file included a link to Zimbu’s official website — right below the link for sponsoring Vim, and above the link for a charity helping children in Uganda.

Bram Moolenaar Sig File - January 24 2020 Vim user mailing list

As recently as May 14th, in a post to Vim’s Google Group, Moolenaar .sig included a long joke with a reference to Zimbu.

Bram Moolenaar sig file - May 14, 2023 (Vim_dev mailing list)

But notice how the .sig’s last lines had changed? They now just included a blank space where the Zimbu URL was omitted.

Maybe it was a silent acknowledgment of the language’s relegation to a distant back burner. On August 9, on the Vim developer’s mailing list, co-contributor Christian Brabandt reminded the community that Bram’s family had passed the torch, granting access to Vim’s GitHub repository. (And that the people already managing crucial mailing lists vim-dev and vim-use would continue to do so.) But when The New Stack contacted Brabandt about the current status of Zimbu — and if anyone was talking about maintaining it — he wasn’t sure. “Unfortunately, I don’t know the status,” Brabandt (adding “It seems the source repository was lost when Google Code shut down.”)

On GitHub there’s at least one random user with their own unofficial Zimbu fork (“since the official one isn’t hosted on GitHub”). Another user is hosting what looks like a 9-year-old repository for Windows XP 32-bit Zimbu.

GitHub repository for user bsed - includes Zimbu w32 (screenshot August 2023)

But it’s true that the Zimbu language specification on Moolenaar’s website hasn’t been updated in over 7 years — and that Zimbu.org brings up an error message. (“The site zimbu.org points to the site ‘zimbuweb’ which does not exist. Please contact the domain administrator.”)

Brabandt seemed pessimistic about its future prospects. “I followed the development when Bram was still working on it, but I don’t think he worked on it the last years. The website also seems to be down. So I think this project is dead.”

Maybe he’s wrong. (We’ll post an update here if we hear anything.) But just like Vim, the Zimbu programming language stands as testimony to just how much Bram Moolenaar cared about the community of coders.

Steve Jobs once said that “One of the ways that I believe people express their appreciation for the rest of humanity is to make something wonderful and put it out there… [S]omehow, in the act of making something with a great deal of care and love, something’s transmitted there.”

And just like Vim, Zimbu shows what can happen when a programmer dreams a dream…

Group Created with Sketch.