11 ms·
I still Lisp (2021)
- gaze 4y agoI have a suspicion that outside of the 10 people writing lisp seriously—shirakumo, stylewarning, lispm, and some others— there’s more characters of prose praising lisp being written than lisp being written. It’s a great language. I really like it and am using it for some projects. I just want people to actually use it rather than talking about using it. Edit: I’m wrong in the present case! Author has some cool projects on GitHub under themetaschemer. Still though I’m struck by the ratio of lisp project articles vs lisp praising articles hitting HN’s front page.
- weavie 4y agoKinda by definition the people you hear about are the people that are talking about it and not the people that are using it.
- gaze 4y agoWhat? You see tons of rust projects hitting HN advertised as rust projects and a very different ratio of this to “rust is the enlightened choice” articles
- taylodl 4y agoThat's because Lispers don't waste their time re-writing well-worn tools in Lisp just for the exercise of writing something in Lisp. All those Rust posts you're talking about on HN? They're annoying.
- sshine 4y agoWhere would you recommend one starts? With Racket?
- gaze 4y agoEvery lisp variant is a bit different. Racket, Clojure, and Common Lisp are all excellent. Read a bit about the compromises and dip your toes in one and see if it sticks.
- User23 4y agoRacket has more didactic origins but I’m given to understand its a good albeit slow general purpose Lisp. Common Lisp is basically the kitchen sink programming language and with a good compiling implementation like SBCL it’s possible to write high performance code. Clojure is the Lisp that you’re most likely to get paid to write. It’s as performant as any JVM hosted language.
- bmitc 4y agoI like Racket, but it is also a kitchen sink Scheme. It has a ton of features: GUI framework, drawing (although it's slow), event spaces, places, futures, OOP, mixins, traits, macros, #langs, etc. It can get quite complex very quickly. I have mainly used it as a Scheme.
- School-Cotton 4y ago> It’s as performant as any JVM hosted language. Surely not true if you write it idiomatically using the standard “purely functional” collections.
- KingMob 4y agoNo, but it offers a lot of escape hatches to get closer to Java-level performance: transients, mutable fields with deftype, atoms, transducers to minimize intermediate sequences, type-hinting, Java interop, etc. I've seen Clojure sped up to within 20% of Java's speed, at the cost of very un-Clojure-y code.
- Keyframe 4y agoYeah, scheme will do. Racket especially since it has all things to get you started. Once comfortable, try dipping into proper CL like SBCL and then decide on a small self-designed project with a clear goal in mind. That way you'll see the struggles or lack of.
- floren 4y agoI think Lisp has a sort of cachet to it, "lost secret of the ancients scorned by foolish mortals," that draws a lot of people to talk about it endlessly and speculate about how important it is instead of just... using it. I used to see the same thing in the Plan 9 community where people loved to post on the mailing list about all their grand plans for doing stuff with Plan 9, but they never even installed the goddamn thing! If they had, they'd have realized it has some neat ideas but it's also just a software system, and a rough-around-the-edges research system at that. Similarly, Lisp is just a programming language, and regardless of how many blog posts you read about it, you'll still have to actually make the program in the end.
- throw009 4y agoLisp is a research language that lucked into great syntax by accident. I use it all the time to help me think through a problem and then implement it in something brain dead like rust so the average programmer can follow along. From the outside my code bases look 0% lisp, from the inside they are 100% lisp with build artifacts in other languages.
- grugagag 4y ago> I use it all the time to help me think through a problem and then implement it in something brain dead like rust so the average programmer can follow along. Is Rust brain dead language anyone can follow along? Did you mean python? > From the outside my code bases look 0% lisp, from the inside they are 100% lisp with build artifacts in other languages. Can you expand on that? You generate code of other language than lisp in lisp?
- throw009 4y agoNo Rust, warmed over ideas form 40 years ago are just hard enough to make mediocrsties think they are cutting edge. >Can you expand on that? You generate code of other language than lisp in lisp? I write the real program in lisp in two weeks then translate it to a brain dead language over a few months so the average developer contribute to the code base. It's rather impossible to get people used to algol descendants to think about complex programs. It's rather like explaining color to the bilnd.
- neilv 4y ago(I've done a lot of Lisp, for money, and for open source platform&community buildout.) HN articles about exotic things, not just Lisp, do seem to get upvoted disproportionately. Also, PG declared Lisp as something you're supposed to think is important or a superpower, and I've wondered whether that also contributes to some upvotes on HN. But I'm not aware that a single one of the bajillion YC startups used Lisp. Maybe it's like an admirable religious dogma that a congregation affirms each weekend, and then promptly forgets about for the rest of the week.
- jfoutz 4y agoreddit. they switched to python for various reasons.
- thebigspacefuck 4y agoThey’re switching to golang now for other various reasons
- lispnut 4y agoAny links to stories about them switching to golang I can follow?
- justcool393 4y agoso as far as i can tell it's not like a full switch per se but reddit has services written in both python and go. r2 (old reddit, the reddit API, some parts of new reddit, some of their ML stuff), their monolith, is still written in python. some services they have in go include some real time services (like the reddit talk stuff seems to be primarily written in go) reddit kinda seems to have a SOA (not microservices). while there are some codepaths that go through r2 (and indeed this seems to be the case in a lot of cases with regards to old reddit), a lot of newer code uses services. (note: their engineering blog (/r/RedditEng) calls a lot of their stuff microservices and indeed they may be using that for some things but a lot of their stuff have been described as using more of a SOA vs a microservices.) someone like /u/ketralnis may have more information as well?
- owl57 4y agoI feel like there may be more Emacs Lisp being written recently than other Lisps and prose about Lisp combined.
- convolvatron 4y agowhich is a terrible shame and a lesson. of the 10 or so lisp like languages i've used extensively, elisp is by far the worst. it succeeds because it interfaces with something important, and its carried along everywhere.
- asyd 4y agoI agree, but I'm grateful that it exists. After much searching for the perfect languages and perfect tools (while using emacs as a simple text editor), it finally dawned on me that Emacs itself is as close as I'd get to a lisp machine right here in my own back yard. A lisp machine that sits quite nicely on top of linux/unix and plays very nicely with it. There's much that I love about the lisp world, and the author does a great job of articulating the reasons why. There's also much that I love about the unix philosophy. Emacs is a bridge between these two worlds that I love, and I'm old enough now not to give a shit (or need to give a shit) what the rest of the world is doing. This is home.
- pxc 4y agoIt's the lesson of JavaScript as well, famously.
- throwawaysalome 4y agowhich is a terrible shame and a lesson What's the lesson? That a text editor's extension language needs the strong concurrency and immutability models of a Clojure or sbcl? Getting emacs to sit and roll over doesn't exactly require an industrial grade language.
- jimbokun 4y agoIt reflects the beauty of the Emacs design, Taft something written decades ago is still being extended today to completely new use cases, because of the dynamic and flexible Lisp engine interacting with the C core.
- nequo 4y agoI wonder what dialect of Lisp is the most widely deployed and most widely written. Maybe Clojure, or Emacs Lisp?
- fulafel 4y agoAutoCAD uses it for scripting, might be a candidate. Eg https://knowledge.autodesk.com/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2022/ENU/AutoCAD-WhatsNew/files/GUID-80F564DA-A5C4-4242-91DB-2331E231E2A6-htm.html https://knowledge.autodesk.com/support/autocad/learn-explore...
- eyelidlessness 4y agoI haven’t written any kind of lisp for years, though I used to do so professionally (Clojure) and have been moderately successful getting some reusable stuff open sourced in that context (every time I look back at the “biggest” of these contributions it’s always amusing because it was not much more than a relatively simple macro). I’d love to write more lisp, and like the article author I’m drawn to Racket, but I’ve just got very little bandwidth for exploring it further. Even so, lisp generally is something I advocate learning especially to mentees, because learning it (in author’s sense pretty much exactly as expressed, but with no strong feelings towards static typing at the time) was so transformative for me. I don’t need to write lisp to reap most of its benefits now… I write code in whatever language with the same attitude the author describes: mostly operate on values, abstract and isolate mutations with particularly high value, enjoy reasoning about code easily. And I’d add: recognize things which are like sexprs for what they are as things you can treat like sexprs because that’s more or less what they are. Granted I’m not posting anything to HN, front page or otherwise besides comments. But I’m still inclined to praise lisp even a few years out from the last time I actually wrote any. Because it’s bound to be as foundational for others as it has been for me.
- bsder 4y agoLisp was probably the first widely available language to use garbage collection as well as generate an ecosystem. As such, it damn near was a superpower compared to everything else available at the time in about 1984--think Assembly, C, Pascal, etc. Garbage collection meant that all the effort everybody else spent on memory management could be spent on your problem. And the ecosystem meant that you had actual data structures to work with right in the language library instead of having to build those from scratch every time. Emphasis on WAS. Right at about 1988, the new languages demonstrated that everybody got the message. Perl, Tcl, Python, etc. all had garbage collection and worked very hard to create a general ecosystem. This roughly negated the advantages that Lisp had. At that point, anybody really well versed in Perl, Tcl, Python, etc. was equally as productive as if they were writing in a Lisp.
- erik_seaberg 4y agoLisp debuted powerful features (GC, lexical scope, closures, destructuring, reflection) back when they were still wildly expensive. Over the decades most of these filtered into everything we use. But I still haven’t seen any rivals for its convenience in providing domain-specific languages via macros.
- ahefner 4y ago...and it did take decades.
- deleted 4y ago[deleted]
- cafard 4y agoSomewhat to my surprise, I ended up writing some script-fu lisp when I couldn't get python-fu to do what I wanted in GIMP. I believe it got some use seven or eight years ago at work for batch resizing of images.
- rosebay 4y ago[dead]
- lukego 4y agoSurely most Lisp hackers /are/ just writing Lisp code behind closed doors. Those 10 highly visible people are the rare exceptions. I'm happy to hear more thoughts and notes like this from the silent majority.
- fulafel 4y agoAt least in Clojure's case, most dev teams are definitely just working on normal (domain-wise) business apps, leveraging existing stuff from the dev community, and not posting on the internet about it.
- distcs 4y ago> Edit: I’m wrong in the present case! Author has some cool projects on GitHub under themetaschemer. Maybe I am missing something but I visited their GitHub but could not find any cool projects. Clearly there are better examples of people who write Lisp seriously instead of evangelizing it. You have given some good examples of them yourself.
- comfypotato 4y agoA portion of it has to be because of Emacs. I read all these front page posts because I love Emacs, and I’m sure I’m not alone. I picked up Clojure because I got familiar with elisp. The gateway has to be Emacs for a lot of people. And it ends up being a very good first impression for the people who stick around so the cycle builds on itself. The tricks my muscle memory does on its own accord with lisp syntax within Emacs makes programming more fun than any other context.
- MrLeap 4y agoI haven't used a lisp for a few years, but I still remember after it finally "clicked" the weird _velocity_. Code just flooded out. In other languages I hop around from class defs to class defs, different files. Just richocheting all over the file system. Something about LISP removes a lot of the ricochet. It's a weird sensation.
- sshine 4y agoI didn’t do a lot of Lisp, but I remember solving Project Euler in Scheme and encountering a dynamic programming problem and finding it extremely easy and natural to write a memoize macro with very little language experience.
- mtlmtlmtlmtl 4y agoQUOTE makes so many things trivial that are straight up ugly in other languages.
- floren 4y agoI've been digging into Common Lisp again lately. I'm really enjoying some parts: CLIM is weird but interesting, and the fact that I'm basically developing inside a debugger makes testing and iterating on stuff pretty straightforward. On the other hand, library documentation frequently feels more like the programmer was making notes to himself rather than illustrating how the code might actually be used. I was also pretty shocked when, after using a quick shell script to generate a file containing a big list (~80MB on disk, 800k items) defined in s-expressions, reading it into SBCL exhausted the heap. After telling SBCL it could allocate two gigabytes I was able to read the file, but doing anything with it was a sure-fire way to run out of memory again. I would never think twice about reading an 80MB file into a Go program! I sort of feel like I'm walking through an abandoned alien city and wondering what size they were, how many limbs they had, and if we share the same 5 senses or not.
- armitron 4y agoLisp won't save you from yourself. I bet a Go program using an equivalent representation (assumption being you naively used READ) would exhibit similar memory consumption. However, that doesn't mean that you don't have other options: - Use an array - Load the entire file in a memory buffer and skip the reader - Use mmap (for extra points, you can keep the entire file outside the Lisp heap but still manipulate it in Lisp)
- fiddlerwoaroof 4y agoYou can run into similar issues in the JVM if `-Xmx#` is too small. This has to do with the way sbcl’s decided to manage the heap and other implementations won’t have this issue. But, I typically start sbcl with an 8GB heap and basically never run into this when consuming large files. But, also, once you hit a couple megabytes or so, it’s almost always better IMO to consume a file incrementally rather than all at once.
- perihelions 4y agoSBCL strings store 4 bytes per character (the raw Unicode codepoints, like UTF-32). It's not ideal.
- winrid 4y ago
- askonomm 4y agoBeen doing Clojure for the past 5 years and while the language itself is great, the ecosystem really isn't. The tooling is subpar, editor support is clunky at best, everything is for some odd reason much harder to set up and explained in a more difficult way. A ton of libraries don't even provide documentation, they just expect you to REPL their functions to find out what they do. The older I get the more I realize that what makes something great to use isn't all about the language, but the surrounding environment, and how pleasant _that_ is to use. Personally I think I will most likely not Lisp for much longer because I'm seeing many other languages have much nicer to use ecosystems, even if they probably pay less.
- fiddlerwoaroof 4y agoThis is the opposite of my experience: one of the main reasons I prefer to use Common Lisp and Clojure over any other language is that the tooling is so much better (emacs + SLIME [CL] or Cider [Clojure]). The only real competitors, imo, are SmallTalk and Prolog environments. However, part of this is the paradigm is completely different and it took me a bit of time to learn what made the tooling great.
- askonomm 4y agoYeah, for Emacs users I'm sure Clojure is great. For the other 99% of us who use VS Code or IntelliJ or something else entirely, it really isn't. Though IntelliJ + Cursive I'd say is probably the best, it still pales in comparison to say Rust or TypeScript support in editors.
- robertfw 4y agoI've found Calva for VS Code to be excellent, what do you think is missing there?
- fiddlerwoaroof 4y agoI tried Calva a lot and suggested it to my coworkers a while back (2017ish) and it was nothing but trouble. Cursive seemed to work pretty well, though.
- xbpx 4y agoLisp feels more creative. You can bend the language, it's malleable. Rust may be the new Engineer's best friend but to me, Lisp remains the tool for the artist. Use Rust to Do It Right. Use Lisp to have fun.
- nathants 4y agofor clojure/jvm, there are a lot of good competitors and not an obvious winner. for js/react, there is nothing even close to reagent/shadowcljs. lisp is thriving on frontend, and doing just fine on backend.
- tmtvl 4y agoI vehemently disagree with dynamically typed being a winning point of Lisp. SBCL's strong support for type checking is the main reason I was drawn from Scheme to CL, and Coalton (https://github.com/coalton-lang/coalton https://github.com/coalton-lang/coalton) is one of the most interesting Lisp projects I have encountered. Type checking can remove an entire class of bugs from even being a consideration. Yes, it could be argued that type mismatches are a trivial class of bug, and yes, proper testing should catch any issues... but catching problems before you go to testing can save you precious seconds, especially when coding in the typical interactive style of Lisp. Lisp lets you code at amazingly high velocity, good support for type checking helps increase that velocity even further.
- butterisgood 4y agoI think it would help the conversation along a bit if those who are against static type checking could articulate exactly how type checking gets in the way of writing correct programs. Isn't making sure the types flowing in and out of your functions match, at some point, something you will eventually need to do anyway? Or are we trying to say the type system doesn't allow for perfectly safe things that should be allowed? I'm not sure I understand it. Then again, I'm also the person who wonders if the restrictions Rust puts on "valid" code aren't also too restrictive, so maybe we all exist on a gradient?
- aidenn0 4y agoType checkers make it harder to modify code in a way that changes types. While you are discovering the correct way to solve a problem, you may desire to make such changes. Therefore types can make it harder to discover the correct solution.
- tmtvl 4y agoThat is indeed an argument against static typing and in favour of dynamic typing, although the demerits can be mitigated through some extent through a combination of organisation and tooling. For example, if our customer IDs used to simply be increasing integers but then we decide to change to a UUID variant it would be a pain if I had something like: (declaim (ftype (function (integer) (option customer)) get-customer-by-id)) And then had a bunch of functions calling out to that which all require integers and I had to change all the declarations from integer to UUID. However, I could save myself some future headaches by doing something like: (deftype customer-id nil 'integer) And using the customer-id type everywhere. Of course, this is a very trivial example and a real problem would be harder to manage. That said, with optional type checking like SBCL has it is entirely possible to fly by the seat of your pants until things start to take shape. Not that it matters too much if you go with the tried and true method of tossing out the first two prototypes, but that's another discussion.
- mythz 4y agoAs author of #Script Lisp [1] I'd say LISP really shines as an embeddable REPL language where you can use it to script larger compiled code-bases like Unity3D games while it's running [2] it's also been useful to open a TCP REPL on a deployed .NET App to inspect its running state and execute its configured dependencies [3]. But I don't use it outside of Scripting .NET Apps anymore other than when needing to perform quick calculations while I'm already in the command-line, I can bring up a quick LISP REPL with `x lisp`. [1] https://sharpscript.net/lisp/ https://sharpscript.net/lisp/ [2] https://sharpscript.net/lisp/unity https://sharpscript.net/lisp/unity [3] https://sharpscript.net/lisp/#lisp-repl-tcp-server https://sharpscript.net/lisp/#lisp-repl-tcp-server