TheJach.com

Jach's personal blog

(Largely containing a mind-dump to myselves: past, present, and future)
Current favorite quote: "Supposedly smart people are weirdly ignorant of Bayes' Rule." William B Vogt, 2010

Language Envy

Every programming language community seems to have a subset of itself that is just overly concerned with envy for another language, whether it's the features or parts of the ecosystem. This isn't necessarily a bad thing, it's actually good when a good idea gets support in multiple languages. It's just interesting how narrow and repetitive the envy can be. (In some cases even incestuous -- JS framework envy leading to more and more JS frameworks.)

When Rails was hot, there was a lot of Rails envy (less Ruby envy). While I preferred Flask, Django wasn't bad, and made good effort at replicating the Rails experience. There were many PHP frameworks as well. In the Common Lisp world, there's been a bit of envy, and it's led to a few frameworks, but they're really not anywhere near supported as Rails or its imitators in other languages. What happens, given that CL is a small community, is that every so often someone new will get Rails envy, and instead of building on top of one of the existing frameworks, they'll make their own, and it too will not actually be where Rails is.

I've been seeing a lot of C envy in the Lisp world recently. I've even participated in some of it myself over the years... I mean, it's really cool that CL is both a super high and super low level language, that we can work with whatever high level abstractions and at the same time drop to machine code if needed. With SBCL, and sometimes a little elbow grease, we can have our cake and eat it too with the most dynamic language that nevertheless has amazing C (or better than C) speeds for things.

But it's not all groovy, there's still a lot of envy, and sometimes the juice isn't worth the squeeze. The FFI situation isn't bad for C -- often it's rather pleasant -- until you run into the issue (hopefully fixed any day now) of performantly passing structs by value. And it could still be better.

The FFI situation for C++ on the other hand is a clustershow... I've been going through Coders At Work, in the first interview it's mentioned that the Python community (this is almost 20 years ago) had a great C++ FFI story -- they just made full use of SWIG and plowed onward. I looked into it and there used to be some SWIG support for CL, but it was unclear how much C++ support there was vs just C, and it seemed to have a lot of caveats, and yadda yadda it was removed and some work trying to add it back has been stalled for 4 years with last activity a year ago. SWIG isn't needed, there are ways to interface with C++ from CL, but they're not very nice.

Anyway, that doesn't stop people from the low level envy stuff anyway. Again, it's cool, but it's also a lot of navel gazing about tuning the generated assembly and removing as much safety as possible to in the end likely not make anything of much difference because of Amdahl's Law.

Curiously there hasn't been much Java envy. There might have been in older times but it seems to come and go even more rarely than Rails envy. It might be worth it to point to some examples.

I recently finished another small project making basic use of prometheus.cl. It works, but the library was last updated 5 years ago and has a couple unresponded to issues and pull requests. The library could add quite a bit more. But more importantly, other libraries could make more use of it! That is, if you depend on such-and-such library, then (best to do it optionally) if you also load one of the library's additional systems, you get exposed prometheus metrics for free that detail interesting metrics and statistics about the library's services. This happens quite often in Java land. So the Java envy here is: better cross-library interop in ways that at most require an additional dependency include and perhaps a configuration setting, but not explicit code wrangling and various function calls or framework integration.

There's also just external tooling support. There's maybe three projects related to selenium webdriver, but only one of them works, and that one also is pretty barebones requiring usage of the JS execution API to do a lot of interesting things.

A few years back there was this somewhat hostile thread on HN that I nevertheless still think points at something important.

Having my retries automatically expose micrometer counters has been a godsend for monitoring.

Micrometer is a pretty popular framework that exposes standard metric container classes and ways to export/expose them to varieties of backends, prometheus being one of them. Various other libraries can and do use micrometer in their code and when those libraries get added to bigger projects, if those bigger projects decide to setup monitoring support, then bam, these libraries are showing interesting micrometer data without them having to do anything. Sweet. Prometheus.cl has a couple collections for SBCL data that do that built-in, now imagine if say Dexador exposed a collection of metrics that you could optionally load and suddenly have interesting data on all your dex requests. This happens in Java, it doesn't happen much in CL, and maybe CL needs some Java envy for it to happen.

Metrics are just one example on my mind right now because of recent work but Java is full of them. Java's JSRs are a great way to get some of this going as it didn't come from nowhere. Lisp has a similar CDR concept but it's very much limited and no one has participated in it seriously for a long time.

In my HN comment at the bottom of the linked thread I misinterpreted the poster with "It really seems like you just want CL to get the libraries and tooling you expect from the Java world, especially stuff mostly used by big companies with big deployments." This I think was just partial projection. My last job was at a big company with a big deployment, I certainly enjoyed some of that big Java stuff to make my life easier.

Maybe we just need big CL companies to get such things. I do worry about a single company coming in and starting to dominate the ecosystem. Google dominated a lot of Java stuff earlier on (their presence is still felt) but at least there was a crapton of other players big and small, Java just exploded and is still huge. It forced some community interaction and agreements. The CL world is still relatively small enough that we can get by without such things, and kind of like it that way anyway. Still. Every so often individuals do come along who try and remake a lot of things in their image (sometimes without even understanding what defmacro does), sometimes they make surprising headway. A company with lots of money and people could have a lot more success, but that wouldn't necessarily be good if what they pushed was technologically not so great.


Posted on 2025-08-18 by Jach

Tags: java, lisp, programming, rant, thought

Permalink: https://www.thejach.com/view/id/448

Trackback URL: https://www.thejach.com/view/2025/8/language_envy

Back to the top

Back to the first comment

Comment using the form below

(Only if you want to be notified of further responses, never displayed.)

Your Comment:

LaTeX allowed in comments, use $$\$\$...\$\$$$ to wrap inline and $$[math]...[/math]$$ to wrap blocks.