Sadly, I must say goodbye to Leaf (my programming language)

This is hard to write, or rather, it’s a hard decision to make. After investing many years on Leaf — a programming language, a major life project — I need to take a break from it. It’s no longer fulfilling my goals, and it’s not as fun as it once was. It’s interfering with my other career priorities. Leaf has become part of my identity, and this feels like ripping out one of my organs. But it’s necessary. Let me explain why.

I’ve lost track of the specific event that led to the creation of Leaf, though I do know some of the key reasons. First and foremost, I wanted a technical challenge. Some people may find that odd because programming is a vibrant and diverse world. But I’ve done a lot of programming. I’ve tried many projects and continually looked for new ways to do things. I’ve worked in numerous startups and had many side ventures. Finding new challenges has become quite unlikely. This lack of novelty was dragging me down as a whole.

Even though I’d done some toy languages before, they were nothing compared to an entirely modern language. I was hoping for new obstacles, and on that front Leaf delivered. It stopped being a hobby and became my motivation.

I solved exciting problems and learned a great deal. Building the type system got me deep into thinking about type theory. It exposed me to unknown corners in the structure of languages. It’s the part I wish I could continue working on. Working through the complexities of memory management at the language level was invigorating. And of course error handling. Wow! That was quite the experience. Getting the block flow correct for LLVM is one of those critical compiler challenges.

It’s those achievements that make my decision extremely hard. How can I take this wonderful thing I’ve built and just set it on the shelf? But I was already feeling that urge over a year ago. Something was missing. I needed to do more with it.

I drove Leaf in the direction to create real programs. Above all theoretical tasks, it should be useful. Earlier this year, I streamed the development of a snake-like game called “Wormies”. It gave meaning to the language. It gave me a way to share the work with others.

Sharing is vitally important. I’ve written several technical articles, but the audience is very limited. Let’s face it, nobody knows who creates the languages we use. Sure, a select few names pop up here and there, but for the most part, the language designers and coders are not known. It’s also upsetting to see somebody like Guido step down from the Python project. The success of a language guarantees you lose control over it.

But I had more immediate problems, I hit a stumbling block in the game development. A missing feature, OOP interfaces, was preventing me from using the language the way I wanted. It jumped to the top of my todo list, but I’ve not been motivated to write it. There’s nothing new for me there. There’s nothing new in the realm of compilers here either. Sure, it isn’t trivial, but it is a lot of straightforward coding with no intrinsic reward.

Even with that step done, there’s an enormous amount of work on the libraries and environment. All required before anybody else could hope to use the language. Unfortunately, it’s everyday work — no challenge and no learning for me.

Maybe I should think about my career. Compiler and language developers are rare breeds, but so are the projects that need them. And would I want to work on yet another language, knowing I’ve already solved the interesting problems?

My personal goals lie more on the creative side. I want to do graphics, write music, make some games and record some videos. I had a plan where I’d create all this in Leaf. I’d build out the system enough to do these creative projects. But people that want to see the creative stuff don’t care about the language. Limiting myself to Leaf holds back these other projects. Instead of gaining from my language, I’m actually losing out.

That’s a grim conflict. I knew I could get it working, but in what timeframe? I could never afford to work full-time on it. If it were corporate driven, like I have a salary, the situation would be different. I could still pursue my other projects on the side. But as it is, I have too many ideas competing for the little time I have.

It’s damn hard to let go. I’ve invested a lot of time into Leaf, but I begrudgingly admit those are sunk costs. I must evaluate where Leaf stands now relative to my current goals. And, quite unfortunately, pursuing Leaf at this time is not in my best interest.

Maybe I can pretend it’s a hiatus to lessen the emotional blow.

28 replies »

  1. I’ve been following your blog cause of the technical articles related to Leaf. Sad you have to leave the project behind. Hope you come back to it soon!

    PS: Any plans to hand over development to the open source community? I’m sure someone would be interested to pick up the work if the source code were accessible to many.

    • Everything is available if somebody would like to continue on it. I’m happy to add whatever free licenses somebody might need.

    • To be frank, I am glad that you have stopped working on Leaf, because frankly you made a set of serious design mistakes along the way that rendered the project useless in the end result and thus more time spent on it would be pointless. I could go over each syntactical feature and show you how and why it doesn’t work, but it would probably be too painful to hear. I am sure you learned a lot in this process, but i don’t like to see anyone waste their time. You are obviously a bright fellow and could make contributions elsewhere. It takes thousands of hours to build a new language, and i admire anyone with the fortitude and skill to attempt it.

      There is what a i call the “calculus of error”, whereby you step back from the programming process, and count the time as an author one spends doing different tasks, and although programmers claim that they spend most of their time thinking or typing in code, in reality people spend probably 85% of their time fixing their own errors, staring into the abyss as it has been described by some. If you don’t reduce the probability of error, or at least the time and effort consumed to find and fix errors, you haven’t advanced the state of the art. You know when advancement has arrived when errors depart…

    • I’m actually curious as to what mistakes I made. The pending ideas were thought through basically to completion and the language would be suitable for a large range of domains.

  2. I think a fundamental problem many developers struggle with is the pull between solving the problems at hand and finding or making better tools for solving those problems. If you dug back into the history of any of hundreds of people making comments on Reddit programming or Hacker News or similar sites, I bet you would find countless cases that all follow the same rough path. A person works in one language ecosystem, gets frustrated and finds another that they initially perceive as solving most of their problems, gets frustrated and moves on to a third, and so forth.

    You are one of the bravest and smartest for trying to build your own tools instead of just finding something. I respect you for that, it’s what originally drew me to your blog.

    I wish I could tell you that I’ve found a holy grail, but I haven’t. Good luck. Please do report back with where you land.

    • Thank you.

      I get frustrated with many languages and environments, and knowing so many of them I think adds to the frustration. One gets annoyed that simple things from the different languages don’t exist together.

  3. Hmm, sad news. Currently I am going through a “little” breakdown with Skila and I was recently wondering how you are doing with Leaf… now I know :-( I am not surprised, because this is all understandable — you invest few years in a language, it is not finished and you start thinking, man, frameworks, libraries, how much more will it take, entire life is passing by.

    Whatever your next pick will be, I wish you enjoy it!

    “Let’s face it, nobody knows who creates the languages we use”

    This sentence is confusing — do you mean original creators (sure I know the names) or the current teams maintaining the language (here would be “no” since I don’t keep a track of entire language lifetime)?

    • I mean the original creators of the language. Of course, if you’re a language creator you will know that names, but most people who use a language will not. It’s obviously not a reason not to do something one find interesting, that would be a silly reason, but it’s just a reminder that it could indeed be a strictly personal goal.

  4. I am sympathetic to your plight. I have created many things, and then grew bored with them. If you would like Leaf to thrive, I recommend picking a suitable open source license. According to what I read on Launchpad, you do not yet have a license for this. If it is licensed, someone can fork the language and carry on with it. Often, these sorts of projects allow us to scratch itches that we have, and then once satisfied, someone else picks them up and moves them forward.

    • If anybody cares to fork I can put up a license for it. But usually interest needs to come first, to figure out what licensing and contributor agreements are best.

  5. It sounds like the project basically served its intended purpose of providing some material for learning.

    I wonder – should you have targeted an equally-ambitious but less “already done” goal? Maybe you’d be at the series-A stage by now if it was a bit more of a Purple Cow.

  6. I really like C# and .NET Core, which has an entire community of people that have worked for over a decade to make the language and platform one of the most optimized and modern languages in existence.

    I think what may be happening here is that you had a desire to build something that will help other people in some way, and building a programming language may have been a good idea at first. Reality slowly seeped in, which made it an extremely overwhelming task to take on.

    I can only imagine that once the language is working, you’ll need a database engine, a way to communicate with hardware, a networking library, etc. The list seems to go on forever and one person can’t be expected to develop a fully modern language on their own.

    • I’m actually not sure of the sentiment that I couldn’t do the language and core libraries on it’s own. Sure extended libraries, like databases and high-level things would need a community. But the core environment, plus packaging system, is within the realm of a single person. Getting it optimized to production levels and working out kinks would require more people.

      Each month of full-time work on Leaf would make remarkable progress. It’d be usable by others within a year at that rate.

      And by modern language I mean features of the core language, not the libraries. Those are different scenarios. I’m personally very disappointed with C#.

  7. Front page of HN! The French have a saying: “only stupid people never change their mind” (at least that’s what my French gf told me). Are you still bouldering these days? I’m getting back into it after the long skithumb hiatus.. would be great to meetup for a sesh. And not use the word sesh.

    To the c# fanatic above- you might find it interesting to step out of the little MS world a bit, people have been collaborating on software ecosystems long before microsoft came along salivating all over everything!

    To the other guy complaining about mistakes, Yes! Please tell us! The details of what you see broken are the interesting bits… don’t leave us hanging.

    • I do still boulder, though, not right at the moment due to a ligament injury in my ring finger. September I’m allowed to start again.

      Yes, never changing one’s mind is not a good thing.

  8. It’s sad to see the creators of such useful contributions to the programming world leave their babies to pursue other things, but it’s good to know it’s open source so it’s still possible for your baby to grow some more in your absence. Best wishes and good luck in your pursuits.

    • I’m happy to see that project persists. I used that language a long time ago, when it was in its infancy.

  9. Thank you for your posts on Leaf (as well as other topics). I always found them interesting, well-written, and informative! I wish you the best on your future projects.

  10. If you are interested in your mistakes it is rather an involved conversation; it isn’t feasible explain all the different design mistakes in a little brief email note, but perhaps a few of the problems inherent in your language are: • a lack of a fully specified grammar, so that you know what your language is and isn’t • lack of arithmetic safety and errors deriving from that. • You included tuples, but no structuring beyond that which makes it feel like the first version of BASIC. • There is no drawing model, or database. • Leaf has no intrinsic graphical model, so therefore you are at the mercy of the horrendous .NET or HTML/CSS/JS morass. • But most importantly Leaf has no concept of automatic recalculation of derived items. Even if you had a polished compiler, top-notch documentation; as currently designed, it would not deflect even 1% of the current Excel user base which is by far the largest body of programmers today. If you see my blog at e-dejong.com you will see a note on March 2018 where i talk about a scale of sophistication. Any new language that doesn’t significantly advance beyond current languages on this scale is pretty much DOA (dead on arrival).

    New languages are in development that address the central problems facing programmers – that of avoiding human error. The majority of all time spent programming is devoted to fixing errors. Identifying the cause of errors, and devising a syntax that eliminates these sources of errors is the key facet of the 5th generation language projects.

    • You know, usually I’m polite. But you clearly have no idea what you’re talking about when it comes to Leaf, or even compiler and language design. You’re just wasting my time.

    • Too bad the Internet is full of people like this (and they, full of themselves).

    • This person clearly sucks and has never invented anything new. It’s so much easier to criticize and feel “smart” because you’ve never been judged on your own work. The fact that he thinks that Spreadsheets are the top of Computer Science Wisdom, and basis most of his rancor over…. built-in memoization?!? BTW Python has no built-on graphics model either, Einstein.

  11. So, this guy is saying because you didn’t reinvent a VBA replacement for Excel, your language is of no use and full of errors? Hahahaha.

  12. I have written my own language called OMNI, in the 1980’s. It was a lot of fun and I got a lot accomplished, including a user-mode virtual memory implementation that was pretty amazing especially at that time. I even had an investor to help fund it because I was poor at the time.

    It never went anywhere commercially, as most new languages don’t.

    I’m still working on a distant descendant of that user-mode virtual memory implementation, all grown up now. :-)

  13. I think your blog has a lot of great information. :) I have been feeling for a long time that a large part of the problem with programming is the slow and painful development of new languages. As you mentioned the more languages you know the more you get frustrated with using one or the other in various situations. I think it would be great if we could see languages develop at the speed of open source as a whole. However, as you mentioned the current complexity of language development and design is far out of reach for many.

Leave a Reply to Mike S. Cancel reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s