4 ms·
Can't speak for the entire industry obviously, but at a few jobs I've had [1] Clojure is used pretty liberally for network-heavy stuff, largely because it's JVM
by tombert 2y ago
Can't speak for the entire industry obviously, but at a few jobs I've had [1] Clojure is used pretty liberally for network-heavy stuff, largely because it's JVM and core.async is pretty handy for handling concurrency.
I know a lot of people classify "Clojure" and "Lisp" in different categories, but I'm not 100% sure why.
[1] Usual disclaimer: It's not hard to find my job history, I don't hide it, but I politely ask that you don't post it here.
- packetlost 2y ago> I know a lot of people classify "Clojure" and "Lisp" in different categories, but I'm not 100% sure why It mostly boils down to Clojure not having CONS cells. I feel like this distinction is arbitrary because the interesting aspect of Lisps is not the fact that linked-lists are the core data-structure (linked-lists mostly suck on modern hardware), but rather that the code itself is a tree of lists that enables the code to be homoiconic.
- pfdietz 2y agoI mean, you can have a tree of vectors also, so I don't see why lists are needed for homoiconicity.
- iLemming 2y agoNo, not needed. This argumentation can go both ways; some may even say, "Well, Python is 'Lispy,'" which to me is obviously not. It boils down to what can you do in the REPL, right? https://news.ycombinator.com/item?id=41844611 https://news.ycombinator.com/item?id=41844611
- vnorilo 2y agoIn my mind Clojure is Lispy, Python is not, nor is Javascript. In addition to REPL and macros, I think two other Lispy features are essential: nil is not just the sad path poison value that makes everything explode: lisp is written so that optionals compose well. Speaking of composing, Lisps tend to be amazing with regard to composability. This is another line that cuts between CL, Scheme and Clojure on one side, with Python and Javascript firmly on the other side in my experience. Lisps are as dynamic a languages ever go, unapologetically.
- iLemming 2y agoI just wanted to add that "dynamic" doesn't mean untyped or weakly typed. Clojure is a strongly-typed dynamicly-typed PL. Clojurescript compiler for example, in many cases can produce safer JS code than even Typescript ever could.
- tombert 2y agoOut of curiosity, can you give an example of where ClojureScript is safer than TypeScript? I'm pretty far removed from the frontend world so this sounds pretty interesting to me.
- iLemming 2y agoThis is a slightly expanded answer to your question, apologies for the external link, I could of course repeat here verbatim, but let's not increase entropy needlessly, right? https://www.reddit.com/r/Clojure/comments/1dyjwyo/is_it_easier_to_write_oneliners_in_clojure_than/lclna76/ https://www.reddit.com/r/Clojure/comments/1dyjwyo/is_it_easi... Beware though, that there are today more than one flavor of Clojurescript, nbb for instance still acts just like JS in this regard.
- tombert 2y agoThis is exactly what I wanted...thanks! The last time I did ClojureScript in serious capacity was for a school project in 2021, specifically because I wanted to play with re-frame and the people who designed the project made the mistake of saying I could use "whatever language I want". It makes sense, but I guess I didn't realize that ClojureScript generates some nice runtime wrappers to ensure correctness (or to at least minimize incorrectness). I guess that means that if you need to do any kind of CPU-intensive stuff, ClojureScript will be a bit slower than TypeScript or JavaScript, right? In your example, you're adding an extra "if" statement to do the type check. Not that it's a good idea to use JS or TypeScript for anything CPU-heavy anyway...
- 2y ago
- packetlost 2y agoThat's mostly my point. A linked-list structure is not the interesting part. I use the "generic" reading of list above and don't mean to imply some particular implementation