3 ms·
There's newLISP http://www.newlisp.org/ http://www.newlisp.org/ which takes a fresh look at lisp and has plenty of libraries. Lately, I'm going back to what I
by GeorgeTirebiter 3y ago
There's newLISP http://www.newlisp.org/ http://www.newlisp.org/ which takes a fresh look at lisp and has plenty of libraries.
Lately, I'm going back to what I used years ago: Common Lisp. There are great books describing it, and implementations like SBCL https://www.sbcl.org/ https://www.sbcl.org/ are solid.
p.s. Plenty of time to come with the lisp for the 22nd century!
- anonzzzies 3y agoYep, I regularly try new ones but sbcl and emacs/slime are hard to beat.
- tombert 3y agoI know it's a bit of an oddball in these discussions, but I find that I still have the most fun with Clojure. It's fast enough, relatively easy to get anything I want done, with proper functional data structures built in, with the entire JVM ecosystem to play with if I need it. I got pretty into Chicken Scheme a few years ago, and I did a quick breakout clone in Racket as well, and I think they're pretty cool, but Clojure is the only one that has ever evolved past "toy" for me.
- jjtheblunt 3y ago> the entire JVM ecosystem to play with if I need it. Do you ever need it?
- tombert 3y agoKeep in mind, I'm almost always in the engineering world more than the pure CS world, and yeah, it's often pretty useful. The Apache tools are the biggest things for me; I do a lot of work with Apache Kafka, so being able to directly use the first-party libraries like Kafka Streams is useful. If I need to do any kind of distributed processing stuff, I have Apache Spark or Apache Flink when I need it. It's kind of falling out of favor now, but I still occasionally have a need for Apache Zookeeper as well. Now, I'm sure that there's Clojure-first versions of these things, but the sad truth of the software landscape for me is that a lot of it is still powered by Java. I can either be tasked with reinventing a lot of the infrastructure myself by using a language that doesn't have good Java interop, or I can use a JVM language. I think that Clojure is the least-bad of the latter category. In some ways, Clojure is an even better Java than Java; it's easy to compose together arbitrary java methods, without any kind of fancy fluent interface or anything, for example, and there's lots of helper macros that I think really do smooth over the Java-ness of certain interfaces.
- bitwize 3y agoThis is how I feel about Kawa Scheme. It has very good Java interop without all the... Clojurisms which are like pebbles in my shoe while I'm working. It's what I'd reach for if I wanted to author, say, a large web service from scratch.
- tombert 3y agoClojure was the first Lisp I learned, and I started using specifically for its concurrency support, not the fact that it was Lisp. I later grew to love Lisp and played with other ones. I bring this up, because I am curious which “Clojurisms” annoy you? I probably didn’t notice them because I wasn’t used to other lisps when learning it.
- bitwize 3y agoCommon Lisp and Scheme are built on s-expressions which are lists of symbols and other atoms. All of the core syntactic constructs are based on this. Clojure decided to add in other syntax for things like arrays and maps. Which, okay, fine, other Lisps have syntax for those things too but Clojure built syntactic constructs out of these and that just messes with my Lisper brain. The way let, fn, and defn work... ugh. A lot of Clojure people might be like "I don't see anything wrong with it, in fact I prefer things the Clojure way." Whatever. You do you, man. I just can't with that. Kawa Scheme for me every time if I want to Lisp with Java libraries. Second place, ABCL.
- pjmlp 3y agoAs someone that learned Lisp in the 1990's, starting with The Little LISPer, all the way to classics like The Art of the Metaobject Protocol, dusty digital copies of Xerox and Genera manuals, with a little XEmacs Elisp on the side, I am perfectly fine with Clojure's design decisions, and is also the only Lisp like language I still reach for. The discussion about parenthesis is a bit ridiculous, but unfortunely their visual distribution does matter, and Clojure is more appealing to folks without Lisp/Scheme background.
- 3y ago
- bitwize 3y agoNewlisp actually revives ancient mistakes in Lisp history. For example, there is no lexical scoping -- and "contexts" are not a substitute for lexical scoping. Lexical scoping ensures that bindings introduced within a scope cannot leak outside the text of that scope, avoiding subtle bugs that may manifest with dynamic scoping. Hence, Newlisp's lambda isn't really lambda, like Lisp 1.5's but very unlike Common Lisp or Scheme (absent side effects). Newlisp's default (and most used) FFI is also... dangerous. You simply import a symbol from a shared lib and it gets bound to a procedure corresponding to a C call to that shared lib. No specifying of parameter types -- and most platforms do not encode parameter type information in shared libraries in a standard universal way. (Things like C++ name mangling, and COM, only apply to libraries written within their respective ecosystems.) But don't worry. Newlisp trusts you to get the parameter types right, because Newlisp is for the practical Lisp programmer. Woe betide you if you don't, though! Guile's (system foreign) module provides a similarly dangerous FFI, but at least you can (and must) specify parameter and return types when you import a foreign procedure from a shared lib that way, allowing for checks for parameter correctness at the call site, if not the import site.