We Have This Today With Common Lisp
Posted on 3rd of February 2023
Despite not using Twitter, I stumble upon some Twitter threads every
once in a while, and I have to read them through. This time, it was
one of the tweets that John Carmack, for whom I have tremendous
respect, wrote:
Programmers are also users, and “funnel drop offs” apply. “Show
source” was pivotal for the web, and I wish native code behaved
similarly — ctrl-break any application and be in a debugger with
full source and the ability to make changes.
Precisely this kind of control-break behaviour where you can
immediately after failure get into full-fledged debugging,
inspectability with complete source available but also where you can
evaluate any expression in any stack frame is available in Common
Lisp. Today! Similar behaviour is basically impossible to implement in
any modern language that requires compiling and running to do
anything, meaning C, C++, Rust, Haskell, Go and so on.
Actually, just recently, Jack Rusher had a
great talk in Strange Loop, called “Stop Writing Dead Programs”, which
revolved around this exact topic, why we keep using technologies that
were meant for batch-processing days and punch cards, and one of the
topics in this was the previously mentioned ability to debug from
Lisp. Check it out:
So naturally, in the Twitter thread, someone raised Lisp, and Carmack
responded to that with:
Unfortunately, heavily customizable languages like lisp are their
own barrier to entry, even for those that already know the language.
There is a lot to be said for boring languages making it easier to
contribute.
Which is fair. But, at the same time, every language can be abused;
the same applies to Lisp. Of course, you can go full-on wild west with
various macros, which only you can understand, but when it comes to
good code (whatever that means), even in Lisp, it should be pretty
straightforward and easily understandable. Functions, classes, nothing
too fancy. If you need to use something fancy, the problem should
REALLY require it. Great example would be reader macros from Common
Lisp. Great feature, rarely needed.
It truly saddens me that we live in a world where something that
Carmack talks about would be easily achievable, and you could argue
when looking at the industries where Lisp used to be heavily used, we
had this world, but we just decided to give it away.
Common Lisp would definitely be a fine choice for many problems that
we face today, but we just decided to go elsewhere, and now we have to
live with it. But maybe it’s not too late. Start using Common Lisp
more!