Modern, functional Common Lisp: myths and tips (2020)
ambrevar.xyz
ambrevar.xyz
I would say it's been significantly harder to achieve the same functionality in CL than Clojure, but there are major perks to the ecosystem. I was surprised by how much I've valued conditions and restarts, type inference from SBCL, stack traces, and tooling in general.
Clojure OTOH feels like it takes much less effort to get up and running, feels more intuitive to write, and has far better documentation.
I'm probably going to continue writing my project in both languages in parallel because I love learning and I spend my time poorly. I want to stick with Clojure given that it sees more use these days, but it's hard not to prefer CL once you invest the time in learning its capabilities.
As a final note, was Practical Common Lisp challenging for anyone else? I've read many glowing recommendations of the book, but at times it feels DENSE, and it took a fair amount of staring at the intermediate stages of the projects to understand what was going on.
You are not alone
I'd expect you could make the same heavy use of hashtables in either, though I suspect it isn't obvious to lean on setf so much if new to CL? That, or if you are insisting on immutable structures?
I confess I assumed that alists are probably more competitive in speed for many collections than makes sense.
I suppose libraries to access the 'net (and WWW specifically) etc. are meant. CL the language is very exhaustively documented, even if much of that documentation is more than 20 years old (and a good share predates Google, so it might not be as accessible).
I was also just getting some of my environment set up on Guix and the addition of Guix Shell [0] is great. Now I can set up an environment and load a lisp file instantly (after the initial caching) with `guix shell sbcl [sbcl-packages] -- sbcl --load somefile.lisp [arguments]` Works across computers with Guix for reproducible environments, very nice stuff. Even easier from a blank slate than getting Roswell and/or quicklisp set up, just a one liner with Guix.
[0] https://guix.gnu.org/en/blog/2021/from-guix-environment-to-g...
Pretty sure that's not true since you can't define recursive types. For example, the following is invalid (in fact there is no way in the CL type system to define a type that represents a proper list of a given element type without using SATISFIES):
(deftype proper-list (&optional (element-type t))
`(or null (cons ,element-type proper-list)))
More details about this issue from when it came up during the standardization process:https://www.cs.cmu.edu/Groups/AI/html/hyperspec/HyperSpec/Is...
Modern, functional Common Lisp: myths and best practices - https://news.ycombinator.com/item?id=22412148 - Feb 2020 (155 comments)