7 ms·
Lisp: Notes on its Past and Future (1980)
- labrador 1y agoIt occurred to me this morning that I should learn Clojure instead of Rust for non-lowlevel code because Clojure solves the same problems Rust solves in a much simpler way. I'm a fan of Clojure author Rich Hickey's "Simple Made Easy" talk but otherwise don't know either language in detail and need to do more research.
- armitron 1y agoClojure is a niche language that (for realistic purposes) is still tied to a single platform, the JVM, which (Clojure, not the JVM) looks more dead with every passing year. It never became popular and it's been steadily losing users. It's also not as general purpose as Common Lisp (ie. not suited for system or lowlevel programming). If you're going to learn a niche Lisp, you might as well learn Common Lisp or Scheme which have well-specified standards, have stood the test of time and will still be around for decades to come.
- lenkite 1y ago> the JVM, which looks more dead with every passing year. Lol, only dying/dead in the febrile imagination of some HN commenters. The JVM has had some of the most explosive feature activity in the last several years. Java had several million greenfield projects in 2024-25 - among the top 6 greenfield programming languages according to the Github Octoverse.
- kleiba 1y agoBut also: https://survey.stackoverflow.co/2024/work#3-salary-and-experience-by-language https://survey.stackoverflow.co/2024/work#3-salary-and-exper...
- kragen 1y agoProlog and Dart programmers earn the least, but Erlang and Clojure programmers earn the most? Something is fishy here...
- kleiba 1y agoI would take this statistics, like every other one, with a grain of salt, but still wanted to put it out there as a possible discussion point.
- cmrdporcupine 1y agoLikely just not a statistically significant enough sample of any of those to justify them even putting them on the chart. Except maybe Dart, and that gets the "curse" of being front-end tech which for some inexplicable reason is underpaid.
- kragen 1y agoYeah, that seems likely. Although it's lower than PHP!
- kamaal 1y ago>>Clojure programmers earn the most? All the best finding a Clojure job though. Im guessing they pay all that much, while simultaneously cursing themselves for not using Python instead, and swearing to never use Clojure again. I know that as I have seen people do and say similar things about Perl and Erlang in the last decade.
- sjamaan 1y agoNope. I mostly happily used Python in my previous job for many years, now I'm doing Clojure. There are benefits and drawbacks to each, but I don't know if I'd want to go back to Python. I'm a Lisper (Schemer, really) at heart so maybe I'm biased. Having said that, I don't think I'd pick Clojure for unpaid (hobby) projects. The JVM is such a hog and I don't like anything related to the Java culture...
- lycopodiopsida 1y agoI prefer CL, but… clojure at least has some commercial usage and is by far the most successful of current lisps, if we do not count elisp.
- vindarel 1y agoJust to counter-balance the inferred conclusion that Common Lisp would not have any commercial usage (sorry, words are important, FUD is too close from hasty wording or hasty conclusions): https://github.com/azzamsa/awesome-lisp-companies/ https://github.com/azzamsa/awesome-lisp-companies/ (example companies using CL today, and yes some pick it for new projects, and yes some hire) (and I don't want to argue if the list is impressive or not: it's some commercial usage :D best,)
- mpenet 1y agoClojure will be around as long as the jvm. It’s mostly done at the core level, most updates are to leverage new host features nowadays. The rest is happily provided at the library level by the community (which is still very prolific). And it’s not tied to the jvm per say, look at clojurescript (and derivatives) or the upcoming jank. It’s far from dead. As much as I like CL, the ecosystem is a bit of a desert compared to the jvm.
- labrador 1y agoWow. I clicked on your user name for some reason. You've been here 19 years and only have 34 karma and made only 16 comments! Anyway, I came here to say Clojure also targets JavaScript and could target more like ClojureCLR https://clojure.org/about/clojureclr https://clojure.org/about/clojureclr Here, have another karma point!
- mpenet 1y agoThanks! Long time lurker indeed. I also forgot the very solid ClojureDart.
- bitwize 1y agoThe JVM has suffered a fate worse than death: it's become so wildly successful that it's boring. So much enterprise shit runs on Java that it has sort of faded into the background noise of civilization and, like the System/360 (now Z/OS) before it, doesn't grab headlines anymore.
- gleenn 1y agoWhich makes Clojure extra tempting because there is a bit of a infectious way to get Clojure i to corporations when you are always just handing the ops guys a "Java" we app bundled as a jar but secretly inside it's all Clojure compiled classfiles that work perfectly run on many JVM-based web servers with no additional effort. I think Rich even alludes to this fact in one of his talks where it would be disallowed to run Ruby/Python/Rust whatever but it's Java then it's a know entity.
- bitwize 1y agoYeeeeah, except we're living in the DevOps era, which means things like "thinking about how this will be built and deployed" is now the devs', therefore the whole organization's, responsibility, and so you have to think about whether your CI/CD pipeline can accommodate, or be made to accommodate, the Clojure compiler, leiningen, et weary cetera. There's another, orthogonal, aspect: I half-jokingly suggested Clojure as a substitute for one of the DSLs we use at work, and my idea was shot down by a teammate based on the reasoning that Clojure is hard and most of the Java devs (not my team, of course) in the shop are not up to learning it or coding in it. So that's another thing to consider: when you leave the company, who else will be up to maintaining what you produce? Both of these considerations weigh strongly against attempts to "sneak Clojure in through the back door".
- kloud 1y agoAlthough niche, things are pretty lively in the community. Among other things this year great progress was made on Jank, the native LLVM-based implementation with seamless low-level C++ interop. As part of that work a test suite is being created [0] and now includes runners for all of the major implementations to compare compatibility, next best thing besides a formal specification. [0] https://github.com/jank-lang/clojure-test-suite https://github.com/jank-lang/clojure-test-suite
- cmrdporcupine 1y agoI frankly miss the JVM. I work almost exclusively in Rust these days and haven't worked in Java or Scala since 15 years ago, and I do prefer working closer to the metal.... But... The JVM is an amazing mature runtime with a boatload of tooling. JMX, which has been there since almost the beginning, is the kind of thing missing from almost everything other managed runtime I've worked with. The amount of R&D that has gone into making it execute with good performance, and its overall stability... Yeah, it's got the curse of being boring. I do think it is perhaps unfortunate that Clojure is tied so heavily to the JVM, because I actually don't think it gains much from that ecosystem... but it's a product of the time it was first written. Actually hell. I'm between jobs, I like Lisp, and I miss the JVM. I've never worked in Clojure, but does anybody want to hire me to work in it? :-)
- asa400 1y ago> I do think it is perhaps unfortunate that Clojure is tied so heavily to the JVM, because I actually don't think it gains much from that ecosystem... but it's a product of the time it was first written. When I was doing more Clojure, I loved that it was on the JVM because it meant I got to use every Java library under the sun. There are tons of battle tested Java libraries that didn't have to be rewritten in Clojure, and getting to use them for approximately zero financial and runtime cost was a HUGE benefit of Clojure compared to other niche FP languages.
- labrador 1y agoI don't care if it's niche if it solves my problems and gets the job done faster.
- chamomeal 1y agoJVM is very much not dead even slightly. They just released virtual threads, which are ridiculously awesome. Also it's not tied to a single platform, clojurescript lets you write clojure in browsers and on node.js, and babashka lets you use clojure in a scripting environment via a single executable
- galaxyLogic 1y agoI haven't tried clojurescript but I'm fearful of languages that run on top of other languages or platformks, because of complications that produces for debugging. How do you debug ClojureScript? Can you modify the source-code while in the debugger? That is a huge time-saver, you debug and see a typo and fix it right away. My preference are influenced by my background in Smalltalk's "live" environemnt: you see the variables, the stack, and can change anything without having to stop the debugging session and then have to go back to the "editor" and then locate the place you (now know) you want to modify, and then start again.
- chamomeal 1y agoHm I definitely haven’t tried a debugger! I’m not sure if that’s a PITA to set up. I had a terrible time trying to get a debugger working with typescript on top of node. Since clojure is so REPL heavy I haven’t felt like I’m missing a debugger too much. But the smalltalk live environment sounds ridiculously cool. I do end up using REPLs to remote programs (even prod lol) pretty often, which is pretty crazy for me coming from a node background
- AnimalMuppet 1y agoYou're saying that Clojure is looking more dead, so you suggest... Common Lisp? That looks considerably more dead than Clojure.
- tjr 1y agoI'm not sure that Common Lisp looks less dead, but rather, more eternal.
- lucyjojo 1y agoClojure is not going anywhere anytime soon. It sees plenty use as Clojure/Clojurescript and Babashka. (and other niche variants). Jank is shaping up to be real nice too.
- deleted 1y ago[deleted]
- lucasoshiro 1y ago> Clojure solves the same problems Rust solves in a much simpler way I'm curious about that, can you elaborate? I'm a beginner in Clojure and I only know a few concepts about Rust, but it seems to me that they solve (at least, currently) very different problems... I only saw Rust being used in places where C or C++ would be used in the past (Linux kernel, CLI apps, desktop apps), while I only saw Clojure being used as a modern and functional Java and JS replacement. Not to mention how different they are as languages (static vs dynamic typing, native vs jvm, borrow checker vs garbage collection)
- labrador 1y agoOne thing that jumped out at me is you don't need Rust's borrow checker to prevent thread race conditions because data in Clojure is immutable. That's a huge simplification over Rust. What I hear mostly about Rust is complaints about the borrow checker. I wrote a simple Rust utility and found it frustrating. But again, don't take my word for it because I don't know either language.
- deleted 1y ago[deleted]
- bmitc 1y agoI would argue that F# would be the choice of language in place of Rust if you don't want to deal with Rust's type system. F# is immutable by default with good concurrency and a static type system.
- labrador 1y agoThat's a great suggestion I had forgotten about, which is strange since I'm a C# programmer. Part of me wants to really learn a Lisp to see what it is special about it that I keep hearing about. I tried Racket and Steel Bank Common Lisp but they didn't seem appropriate for the commercial programming I'm used to. Clojure is being used commercially.
- 1y ago
- kragen 1y agoHow does Clojure do on McCarthy's desiderata from this paper, as you see it?
- beders 1y agoThe Clojure (or any Lisp) journey is very different, not because of the language per se, but because of the developer experience. In Clojure, there's no appreciable compilation time. During my work week I barely, if ever, restart the application I'm working on: I'm working inside of it via a REPL connection. It's an entirely different ball game and if you just compare language features you are missing out on an incredible interactive coding experience.
- labrador 1y agoDoes it scroll? Because I like to scroll around when thinking about my program. I always imagine Lips REPL ppl saying they keep the entire program in their head but that can't be right. That's doing things the hard way.
- weikju 1y agoYou have files and editors for your files, eg emacs or vim or vscode. Your editor is also directly connected to your running application and can compile individual functions or pieces of code to update the application without a full edit/compile/run/test loop. It happens way faster and more interactively while you code. You can directly inspect the running program and its data within that same framework and with the exact same tools and functions you use to code. To answer another way, you don’t code your application in a REPL, like by line , but with all the tools you’d expect (editor or ide, git, etc) PLUS that live connection to your software.
- skydhash 1y agoThe nice thing about REPLs is that you can try random snippets code. And as the sibling comments put it, you rarely switch to the prompt interface. Instead you `eval` a bit of code and it got sent to the running state of your program as if you've typed it as the prompt. It's more like brainstorming a program using a mood board. You kinda have to keep track of the state, but the latter can be easily inspected so there's no need to keep it your head.
- bandrami 1y ago
- funkaster 1y agoI would recommend taking a look at some of the schemes. In particular I've been having tons of fun with CHICKEN: https://call-cc.org/ https://call-cc.org/ - the fact that it compiles to C and can generate binaries is a great plus.
- calgoo 1y agoI have been enjoying Chez scheme these last few weeks, and having an LLM has helped me when i have missing libraries. The ability to just wrap a C library and statically link everything into a single binary has been really nice too!
- chamomeal 1y agoAs an anecdote, about a year ago I realized I was not having that much fun learning rust. Randomly landed on clojure instead and have absolutely loved it. Particularly as a noob, babashka is SUCH a good way to learn the language. I’ve written myself all sorts of fun utilities with babashka and have learned so much clojure along the way. Even got my coworkers to use my bb scripts!
- uo-a318 1y ago[flagged]
- kloud 1y ago> It seems to me that LISP will probably be superseded for many purposes by a language that does to LISP what LISP does to machine language. Namely it will be a higher level language than LISP that, like LISP and machine language, can refer to its own programs. (However, a higher level language than LISP might have such a large declarative component that its texts may not correspond to programs. If what replaces the interpreter is smart enough, then the text written by a user will be more like a declarative description of the facts about a goal and the means available for attaining it than a program per se). Pretty accurate foresight in 1980, in the "Mysteries and other Matters" section McCarthy predicting declarative textual description replacing lisp as a higher-level programming language, basically describing todays LLMs and agentic coding.
- goatlover 1y agoHow many people are using LLMs to replace coding in Lisp? What code are these former Lispers producing with LLM Agents? I understand what you're trying to say, but I don't think LLMs were created as some replacement for Lisp. I don't think they've replaced any programming language, but they do help quite a bit with autogeneration of Python & Javascript in particular.
- mmmm2 1y agoLLMs seem better suited to help with the Tower of Babel we've created for ourselves: aws commands, Terraform modules, Java libraries, Javascript/React, obscure shell commands, etc.
- atgreen 1y agoI've been having a great time generating Common Lisp code with LLMs. eg. https://github.com/atgreen/cl-tuition https://github.com/atgreen/cl-tuition , https://github.com/atgreen/ctfg https://github.com/atgreen/ctfg , etc.
- seg_lol 1y agoPull request incoming to add back your missing README emojis.
- sema4hacker 1y agoI think when programmers are introduced to languages, most grok procedural ones easier than functional ones, hence Lisp and its derivatives have struggled in popularity for decades.
- shawn_w 1y agoCommon Lisp supports both styles. Shoot, it probably favors procedural over functional a bit.
- wild_egg 1y agoIt supports basically all styles which makes it wonderfully useful in whatever domain you happen to find yourself in.
- galaxyLogic 1y agoFrom what I've understood about Haskell is that it allows you to divide your program into parts which are either pure functional, or mutable. That is great when you read the program, you can know that what you are reading now is immutable, whereas in the some other well designated parts it is mutable. But with Lisps isn't it the case that statement 1 can be immutable while the next statement 2 is mutable? In other words it mixes mutable and immutable calls into the same program-file without really isolating them from each other in any way. And that means if one part of the program is "impure", so is all of it. You can't isolate those parts except by following a convention, but conventions are not something that it enforces. And you can't know which parts of your program are pure except by reading the code-statements in detail. Am I right?
- g_host56 1y agonice, I was hacking common lisp this weekend. Also this video was interesting, Oral History of John McCarthy: https://www.youtube.com/watch?v=KuU82i3hi8c&t=1564s https://www.youtube.com/watch?v=KuU82i3hi8c&t=1564s
- vindarel 1y agoOld Lisp posts are cool, then if you want a refresher of what's happening in the CL ecosystem (tools, libraries, compilers…) here's an overview of the last two years (shameless plug): https://lisp-journey.gitlab.io/blog/these-years-in-common-lisp-2023-2024-in-review/ https://lisp-journey.gitlab.io/blog/these-years-in-common-li... and very cool new projects appeared in 2025.
- g9yuayon 1y agoI'm curious why Lisp didn't gain mass popularity despite its advantages. In fact, I was wondering if it's popularity has event decreased in the past decade or so. I remember in the 2000s and even early 2010s, there were active discussion on Clojure, Scheme, and functional/logic programming in general. There seems much less discussion or usage nowadays. One theory is that popular languages have absorbed many features of functional programming, so the mainstream programmers do not feel the need to switch. My pet theory is that many of us mortals get the productivity boost from the ecosystem, in particular powerful libraries and frameworks. Given that, the amazing features of lisp, such as its s-expression, may not be powerful enough to sway users to switch.
- kragen 1y agoLisp has disadvantages too. I wrote about some of them in https://paulgraham.com/redund.html https://paulgraham.com/redund.html.
- vindarel 1y agoIs it the right link? "Lisp" is mentioned once, in a good way. It's an old post too, it mentions Emacs' ilisp mode, which is the now unused ancestor of Slime.
- dkdcio 1y agoit’s also Paul Graham’s website… https://paulgraham.com/bio.html https://paulgraham.com/bio.html
- vindarel 1y agoit's confusing but there's actually written "kragen sitaker" on the article title as if it was an invite post.
- kragen 1y agoI originally posted it to a mailing list where we were discussing the issues: https://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg01676.html https://people.csail.mit.edu/gregs/ll1-discuss-archive-html/... He posted it on his website with my approval, presumably because he thought it was a different perspective worth reading.
- originHarbor1 1y agoIt’s cool how people keep finding new joy in old ideas like Lisp. Shows that good design never really dies.
- swatson741 1y agoWe know in hindsight that lisp became most useful for representing computation, but what ever happened to AI? McCarthy says it's characteristic of LISP. SICP also mentions AI as being fundamental to lisp at the beginning of the book. Norvig & Russel used Common Lisp for the first edition of their book. But, then what happened? Why did it just disappear for no reason?
- sjamaan 1y agoThe AI winter happened. And the AI they talk about is classical, symbolic AI where you try to explicitly represent knowledge inside the computer. The new LLM stuff is all neural networks, and those benefit more from fast low-level vector implementations than high-level ease of symbolic manipulation. So modern AI is all mostly C or even Fortran, often driven from something more pedestrian, like Python.
- noam_k 1y agoI'm not sure what exactly you're referring to, but one avenue to implement AI is genetic programming, where programs are manipulated to reach a goal. Lisp languages are great for these manipulations, since the AST being manipulated is the same data structure (a list) as everything else. In other words, genetic programming can lean into Lisp's "code is data" paradigm. As others mentioned, today everything is based on neural networks, so people aren't learning these other techniques.
- swatson741 1y agoI'm referring to the fundamental idea in AI of knowledge representation. Lisp is ideal for chapters 1 through 4 of AIMA, and TensorFlow has shown that NN can be solved well with a domain specific language which lisp is known to be great for. In fact, the first edition of AIMA even had a NN and Perceptron implementation in Common Lisp. (https://github.com/aimacode/aima-lisp/blob/master/learning/algorithms/nn.lisp https://github.com/aimacode/aima-lisp/blob/master/learning/a...)
- rahen 1y agoLisp didn’t really disappear, symbolic AI did. Lisp was ideal for reasoning systems, its homoiconic and meta-programmable nature is perfect for manipulating symbolic structures and logic. But when AI shifted toward numerical learning with neural networks, tensors, and GPU computation, Lisp’s strengths mattered less, and Python became the new glue for C/CUDA libraries like NumPy, PyTorch and TensorFlow. Still, nothing prevents Lisp from coming back. It would actually fit modern deep learning well if a "LispTorch" with a CUDA FFI existed. We would have macros for dynamic graph generation, functional composition of layers, symbolic inspection, interactive REPL exploration, automatic model rewriting etc. We almost had it once: Yann LeCun’s SN (the first CNN) was built on a C core with a Lisp interpreter on top to define, develop and inspect the network. It eventually evolved into Lush, essentially "Lisp for neural networks", which in turn inspired Torch and later PyTorch. https://x.com/ylecun/status/1944504502260003296?lang=en https://x.com/ylecun/status/1944504502260003296?lang=en So Lisp didn't die in AI, it's just waiting for the right people to realize its potential for modern neural networks and bring it back. Jank in particular will probably be a good contender for a LispTorch. https://github.com/jank-lang/jank https://github.com/jank-lang/jank