This is a great synopsis of the state of things..thanks for posting. Having all this information on one page really helped me grok all the action this year. It really highlights that there is a lot of activity in this space, which is great to see, because CL continues to be my secret weapon! ;)
such a powerful language and such an amazing small comunity. learning lisp is not only fun but it can broaden and deepen your understanding of computing far more than what you get from syntax-soup languages. plus with common lisp you can build industrial strength applications with unrivaled interactive development
I use CL for hobby projects and do love it. The main difficulty with “industrial strength lisp” is finding places in the industry that want to do so. :/
Talking about Common Lisp in the places I worked for in the past has always be met with mockery and disdain. But then again, I have seen this kind of reaction for every non-mainstream language, so it is not really surprising.
I'm currently getting back to CL, hoping to do much more with it for 2023. Being able to develop incrementally in SLIME has been a joy. Hopefully I will manage to find the right project idea to apply CL to.
I was /that guy/ at my last place and I agree that it's not well received.
Though once I was writing some lisp to fix a problem we were having and I had a developer beside me and he was blown away by what was happening. I think that the interactivity is something which must be experienced to be fully appreciated.
I use it at my current start up and could not imagine using another language. I've become too used to this kind of workflow.
Unfortunately the average developer is alienated beyond repair. A significant % of developers make a living working on tools to address the lack of interactivity and poor feedback loop of mainstream languages, and actual interactivity is touted as a bad practice by the TDD fundamentalists.
edit: My advice to young and overly curious developers: never talk about weird languages at work. I don’t know what’s with it but you’ll trigger a visceral and almost violent reaction from the average developer who thinks their livelihood is in danger. It’s just not worth it. And no this isn’t fixed with joining a FAANG.
> Though once I was writing some lisp to fix a problem we were having and I had a developer beside me and he was blown away by what was happening. I think that the interactivity is something which must be experienced to be fully appreciated.
Indeed, I had a similar experience. When quick iteration is helpful it shines.
CCL is used locally for two reasons 1) error messages are better and 2) it ensures that we're writing portable code. SBCL is used in production because it's much faster and it's constantly being updated, so we get cool things for free. I have been eyeing lispworks but I don't know that it offers much benefit right now. We do plan on mobile apps at some point and that's a conversation we'll have with them.
Production itself is pretty much just a live image, not much different than what you'd have when you're developing. We use slynk to be able to connect to it and play with the data. Can see that here [0].
GC hasn't caused an issue yet. I imagine we will run into issues latter half of this year when we roll out alerts but those are challenges which can be overcome. That might even be a lispworks thing honestly.
Thanks for the info. I'm also using both SBCL and CCL, both to stay portable and because it sometimes help finding issues detected by one and not the other.
If you end up blogging about CL (and tech in general) at Feetr, know that there will be at least one interested reader :)
It's something that I'd love to do, especially as there aren't many people using it in production, or at least talking about it, and I think that showing people it's a viable language could be important.
It's a shame that we as a community still throw around the Grammarly article as proof of people using it, I wish we had more recent examples.
Same here, I'm interested in the finance angle as well. I've written a few crypto arbitrage bots for fun over the years, and now that I'm deep in the Lisp hype phase, I really want to do it in Common Lisp. I'm already vibrating at the idea of being able to introspect its operation from day 1.
Also, now that I've decided to go solo-entrepreneur, there is no one that can laugh at me if I decide to use CL for a core system.
The hype phase won't disappear unfortunately. Sorry about that.
Especially in finance where most of the effort is geared towards data and data manipulation, it's almost a super power being able to work with live data and live systems. Your development speed is going to 10x.
I wish you all the best on your journey! Can't wait to see what you come up with!
Could you recommend some videos of live development with CL that aren't for toy examples? I don't know any lisp, but I'd like to see how different it is from other semi-interactive programming languages like Matlab, Python, etc.
I'll be honest and say that I don't watch people write lisp so I'm unsure of the current landscape. I remember Baggers being the guy[0]. That may be interesting to you. Recently I've watched a video or two of Josh Betts[1] and while his shirtlessness is confusing, he's pretty good.
I'm curious, are you able to write full backend services in CL, with http and database interactions, or "just" some domain logic ? If it's the former I'm curious what kind of libraries you are using
Yes, absolutely. For context, we do stock market analysis but we approach it from the perspective of stock prices being entirely supply and demand, and we're looking for stocks which are about to receive a lot of new demand. We handle A LOT of data. Well, a lot for what we do, we're not exabyte scale yet.
We use Postmodern for Postgres interaction. Have no complaints at all. You're able to use s-sql which is SQL statements as s-exps but can drop into just passing it strings if required.
Dexador is how we're doing web scraping (and requests should we need to). Top tier, no complaints. Exactly what you want from it. Plump and lquery are also used for parsing HTML
Jonathan is where I'll fight with most people in the CL community. It's the best JSON library. When I say fight, I mean it, I'll throw hands at anyone recommending cl-json or jsown.
Local-time is something we depend upon a lot. Great for timestamp manipulation.
cl-cron for scheduling. I like it well enough.
I'm also a big fan of Hunchentoot for the web requests. All static pages (currently all addressable webpages) are generated by Spinneret.
There's a few more libraries but they may be more niche or more specific to us.
I only started learning CL during last month advent of code, and it's incredible to know you can do so much with the language, thanks for the insights. As other have mentioned, you can count me in if you ever write a blog about the process
You'll want for nothing but the great thing about lisp, in my opinion, is that it's /so/ easy to create. A good article on this is The Lisp Curse[0], which argues that its power is a bad thing as it prevents communities from forming but as a developer, I want to use the best tools available. If that results in me, as a business owner, requiring less people then that's a win to me.
Creating and redefining functions on a running program is incredible to experience. The turn around time for feature is so much quicker because you can, for example, save a web request and continue applying it to functions until you figure what's wrong.
You're also able to inspect data just by clicking on it. For example, I can define a class, create an instance of it and then click on it to see its data. https://i.imgur.com/4jydmBy.png
Another interesting feature is how errors are handled. If you encounter one which causes the program to stop, it'll raise a frame from which you can choose what it should do next. Should it continue anyway or retry, maybe you should redefine a function, maybe you want to change some of the data. Options are endless.
Something else that I don't use nearly as much as I should is the labels feature from SLY, which allows you to mark certain sexps and record the data that gets passed through them. Image here: http://joaotavora.github.io/sly/images/tutorial-6.png
There is so much more that could be mentioned and I'm sure there are other people with their own favourite features but these are mine.
> The main difficulty with “industrial strength lisp” is finding places in the industry that want to do so
i think its important to not give people unrealistic expectations and this is why i said "you can build ..." instead of "you will find plenty of job opportunities". although, mind you, i don't think that jobs-to-size-of-community ratio is frightening
excellent point, thanks. It's added. I mostly prepared the post with the reddit history, that means someone missed the opportunity to inform the broader Lisp community there.
Maxima 5.46 came out (https://sourceforge.net/p/maxima/code/ci/master/tree/changel...) in April. It also had a number of bugfixes and some new features, personally I am fond of getting rid of the python dependency for building the documentation, but I suppose preventing gensyms from leaking and fixing limit going into an infinite loop may be considered more important by some.
Amazing work by the author of the Common Lisp Cookbook.
I've hesitated to get into CL for months, but seeing about all the activity going on, I'm in for 2023.
It is wonderful to be back developing in CL after so many years. I hope 2023 will see a community of users grow around the system. I would love to see what uses people put it to.
That, after all, is why I started to project, combining my two favorite software things: Common Lisp and 3D graphics.
I likewise want to thank you for the great YouTube videos that you produced. Watching someone interact and do things in CL helps me to understand it better as someone who plays in Scheme/Racket on the weekends.
This will take a while to read through! I have been using Common Lisp since 1982, love the language, but I have been drifting over to Python more in the last 8 years because of support for deep learning.
That said, I think CL is the best research language.
Interesting how Lisp code is NOT littered with " if something != null, ...", unlike your average Java project (or even python, but it's less visible), and just works.
My understanding is that busines-as-usual handling of nil (empty lists) implicitely confers to Lisp code monadic style which help to avoid tedious checks
This is the way Clojure works too. Nil is treated as an identity/neutral element. This goes beyond lists: in contrast to Common Lisp who equates nil to the empty list, Clojure maintains a distinction and you're supposed to handle nils by correctly implementing functions. This is as easy as using clojure's core functions, they all have been tailored to handle nil as the neutral element.
As a consequence, in Clojure, nil's neutrality extends to other datastructures, for instance (hash)maps. (assoc nil :some :value) => {:some :value}.
Why?
I have no particular feelings for or against the JVM. It always surprises me when people get so passionate about runtimes - how much do you interact with them?
They're just in the background doing their thing.
I can see reasons for not wanting to use the JVM in specific cases. For example, it may not have the performance you want for the application you're developing.
I'm just confounded by general statements such as "JVM = no go",
"I want to use C# but I'm more of a JVM guy than dotnet" (or vice versa).
Is this some bizarre nu-console war that's going on in the programming community that I have missed?
> Why? I have no particular feelings for or against the JVM. It always surprises me when people get so passionate about runtimes - how much do you interact with them? They're just in the background doing their thing.
I spent a day writing Clojure after watching a bunch of talks about it. Very keen on persistent data structures.
Every time I put a foot wrong it printed a Java stack trace for me, which was very large but told me nothing. I then went looking for the optimiser and discovered there wasn't one, it just falls through into the JVM JIT and hopes for the best. And finally it turned out a bunch of Clojure libraries were reskinned Java, and therefore likely to have the stereotypical properties of Java code. So that all seems directly attributable to the runtime.
Clojure the language is totally my sort of thing but that was such a horrendous experience that I haven't picked it up again in... what turns out to be seven years (found my stack overflow question about it).
Why => because JVM is poor no fit for CLI, and is a poor fit for games. Those two fields in which I see myself using common-lisp.
Unsure what's so wierd about it, everyone (most) knows about slow cold startup times, and inability to control memory layout in JVM. Also, horrible C bindings
I don't see how the JVM is a "poor fit for games" when it's entirely contextual towards the goals of the game itself. Garbage collection also does not automatically disqualify an environment from games development, and there are plenty of games made in garbage-collected languages out there by both hobbyists and professionals using frameworks like LibGDX and Monogame/FNA/XNA. Depending on the kind of game, sure, the JVM might not be the right choice (or a choice at all), but for most people they likely will be too busy trying to actually finish the game instead of tuning for performance.
For me it's microcontrollers, however I've heard in spite of the unmaintained status, clojure-scheme[1] is very usable. It uses gambit to produce C-code you can compile anywhere.
you might be interested in embedded Schemes. I use s7, which shares a lot of features with both CL and Clojure (for a Scheme) and is very easy to embed in C or C++ apps. I use it for music coding, but others (e.g. Naughty Dog) have done it for games. It's a super fun way to develop. My high level code is mostly Scheme, interfacing with low level C.
I'm with you on stock JVM. The slow startup time is often a deal breaker for me. But there are projects that address this. Like https://github.com/babashka/babashka for Clojure. Or GraalVM for general JVM use.
May I ask why? I've no dog in this fight (I don't work with Java) but I've seen plenty of people against Java the language who were very happy to use Scala or Clojure. I haven't encountered anyone who has specifically said they were against the JVM, so I'm interested whether it's something technical (maybe you do more real-time or work with resource-constrained systems) or if it's something more personal. There are no bad answers, I'm not looking for an argument just genuinely curious :)
Copy pasted: Why => because JVM is poor no fit for CLI, and is a poor fit for games. Those two fields in which I see myself using common-lisp.
Unsure what's so wierd about it, everyone (most) knows about slow cold startup times, and inability to control memory layout in JVM. Also, horrible C bindings
It's littered, just hidden. Eg: if, if-let, when, when-let, unless etc. This makes it appear that the data is passed down in a monadic style, but it often isn't; *nil* is not an actionable value.
If you are calling a generic function you can sometimes avoid such checks by introducing methods specialized on the type NULL (which contains only NIL).