We Have This Today With Common Lisp
Posted on 3rd of February 2023 | 429 wordsDespite 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!