DEV Community

Cover image for Sadly, I must say goodbye to Leaf (my programming language)
edA‑qa mort‑ora‑y
edA‑qa mort‑ora‑y

Posted on • Originally published at mortoray.com

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 if I had 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.

Top comments (18)

Collapse
 
ben profile image
Ben Halpern

Thanks for sharing. It's sad, but I'm sure it was a great experience that you can revisit in the future.

If start another similar technical project in the future, feel free to lean on myself and the rest of the community for any help along the way.

Collapse
 
mortoray profile image
edA‑qa mort‑ora‑y

Thank you for the support.

In the immediate future I think I'll focus on mentoring and teaching. Still a lot of bottled up knowledge that hopefully can help somebody new to programming.

Collapse
 
belhassen07 profile image
Belhassen Chelbi

yeah exactly, so even if you won't have the time, we can help.

Collapse
 
nestedsoftware profile image
Nested Software

This sounds really nice, and if @mortoray can get collaborators, I suspect he may be re-energized to work on this project. However, it may be worth mentioning that even to make a very modest contribution would require pretty solid c++ skills, and if your setup is not nearly identical to the author's environment, just getting everything to compile properly may be its own little adventure! :)

Collapse
 
isaacdlyman profile image
Isaac Lyman

It's always bittersweet when a project hits the doldrums. I've enjoyed reading about your journey with Leaf over the past several months. If it helps, I learned some valuable things from it--mostly from looking up everything you mentioned on Wikipedia. And if you learned everything you were going to learn from the project, I'd say it's less of an organ removal and more of a graduation.

Happy graduation. Don't stop writing. I think we're all looking forward to seeing what you tackle next.

Collapse
 
bosepchuk profile image
Blaine Osepchuk

Yeah, it's tough to give up on a project. I get that.

But each of us only has so many lines of code in us and that number is pretty small in the scheme of things.

So, you might consider your realisation as a good thing. You're making room to do something else that you're passionate about, even if you're not sure exactly what that is yet.

Collapse
 
jdsteinhauser profile image
Jason Steinhauser

You have done something that most people are too afraid to even try. I cannot tell you how much I respect you for creating your own programming language, and also open sourcing. It hurts now, but I hope you take pride in it in the long run.

Collapse
 
jrop profile image
Jonathan Apodaca

Sorry to hear. On one hand, though, can't you in some sense view the journey as an end in itself? I am also developing a toy language, and I really don't want to expect right now that it will ever gain mainstream success. If it does, that's cool, though. I have found a lot of fulfillment in learning how a compiler works, and I have found that there are a lot of skills in compiler writing that commute to other areas of programming.

Who knows, perhaps you'll continue developing Leaf, even if it's just a much slower development lifecycle.

Collapse
 
mortoray profile image
edA‑qa mort‑ora‑y

Yes, the journey has been enjoyable and I learned many things.

I'm glad to hear you're working on a language. They can have lots of fun things to implement and explore.

Collapse
 
develcuy profile image
Fernando develCuy

I had to let go my own OpenSource project (ophal.org) but it has never gone actually. There are still some websites running it that I have to maintain and I resist to migrate them...

BTW, picking the right tool for the right project is not that easy when your very own creation is involved! But you still have to, because solving customers needs effectively is the priority. Otherwise, you only serve yourself and that isn't very ethical.

Best wishes on your new ventures!

Collapse
 
gmartigny profile image
Guillaume Martigny

Some of us (me included) aren't good at wrapping up project to an end. I often tend to loose interest and motivation when a challenge become a task.
Maybe next time, try to surround yourself with contributors if you can find some.
In the end, Leaf will look nice on your shelf. ;)

Collapse
 
kspeakman profile image
Kasey Speakman • Edited

Thanks for sharing. I know that's got to hurt.

Collapse
 
eli profile image
Eli Bierman

Thanks for sharing this honest reflection. It can be hard to connect all the different projects at the moment, but looking back I usually find there are some really interesting threads tying everything together. I'm sure you'll see Leaf's influence in cool ways in the other projects you take on.

It's interesting to hear you were working towards doing more creative projects with Leaf. Making your own programming language is a creative project in and of itself, but I can definitely relate to getting side-tracked on the technical aspects of creative projects to the point of never fully getting to them at all. Tech culture definitely encourages us to value technical details over creativity, but the sharing of creativity and ideas is really what feeds our souls.

Looking forward to hearing about the projects coming up next!

Collapse
 
vitalcog profile image
Chad Windham

So I'm pretty new to the development world. But ever since I started I've wanted to make a toy language of sort as a side project/learning experience. Do you have any advice on how to get started with that? I'm pretty limited on the computer science side of things. I'm an active web developer with experience of only high level languages (both interpreted and compiled). I plan on getting an Arduino simply to play with some Assembly code. I've read the book Code: the hidden language of computer hardware and software and more or less understood the information it presented. (Sometimes much closer to the less side of things...). I became a web developer via a boot camp. And while it was great and did give me the chance to acquire the skillset to jump directly into the workforce. There is SO MUCH MORE I WANT TO DO AND LEARN! The two primary things I want to accomplish in the near future are:

  1. - Write a toy language
  2. - Use relays to create a 4-bit adding machine called "The Nybbler" (get it?)

I'm not somebody who sits around with a bunch of pipe dreams. When I want to do something I go and I try to do it. So if anybody has some good starting point advice on making a toy language. It would be very, very appreciated.

Collapse
 
mortoray profile image
edA‑qa mort‑ora‑y

I got into languages from many different approaches. Doing a full language stack is a lot of work, fortunately there are many things you can do before that.

  1. Build a simple grammar at first using something like XML or YAML that have existing parsers. It won't be as pretty as you want, but it'll skip the parsing stage.
  2. Create an interpreter instead of a compiler. This is a giant switch statement that reads in the commands and executes them rather than producing a standalone program.

That combination would let you have a minimal toy language working within a day. I've used that combination many times before on DSL's. One time I added an M4 macro layer on top to create a custom syntax.