12 ms·
Can somebody comment on the status of Lisp in 2017? If one were to learn a functional language, is Lisp a good choice today? Or is Haskell more appropiate?
by 21 9y ago
Can somebody comment on the status of Lisp in 2017?
If one were to learn a functional language, is Lisp a good choice today? Or is Haskell more appropiate?
- slightlyCyborg 9y agoI am learning Common Lisp after using Clojure exclusively for a year. Common Lisp may be old, but it is extremely powerful relative to Clojure IMO. Clojure startup times are awful, it takes a very opinionated approach to programming (immutable data), its debugger is buggy, it produces unsightly error messages. Sure, these problems may be fixed, but for me, I want a powerful tool that I can use now. I've tried several new hot languages at the time (Rust, Dart, Clojure, Go). I have come to a point in my career where I want to stick to highly complex, but slightly dusty artifacts defined by a standard( C++ & ANSI Common Lisp). The SBCL implementation of common lisp does not give me all of the headaches of Clojure. I also don't have to restart the repl to load libs. On using another dynamic language that isn't a lisp... Forget about it. ...Python maybe for machine learning, but I will probably just wrap cafe in CL or something. PS. I am 25. Seems relevant to this discussion.
- mmargerum 9y ago>I have come to a point in my career where I want to stick to highly complex, but slightly dusty artifacts defined by a standard( C++ & ANSI Common Lisp).... . . >PS. I am 25. Seems relevant to this discussion. This made me LOL. I figured you were 50 or older based on the top of your post. You are wise to pick languages that are proven and "just work " though. I would say Go, while young, is incredibly stable and predictable.
- vindarel 9y agoI've been exploring CL lately. - IMO the documentation state is not great, but it's being worked on. (it's said to be non-existent for Haskell :p ) CL has many books to learn from (CL recipes of 2015 being the more interesting to me http://weitz.de/cl-recipes/ http://weitz.de/cl-recipes/), but the online documentation is not brilliant. Often the web page isn't attractive at all, not every project provides good documentation, the "official" websites are bad (cliki, others). It's being fixed by https://github.com/CodyReichert/awesome-cl https://github.com/CodyReichert/awesome-cl, http://lisp-lang.org/ http://lisp-lang.org/, https://lispcookbook.github.io/cl-cookbook/ https://lispcookbook.github.io/cl-cookbook/, http://quickdocs.org/ http://quickdocs.org/ and http://phoe.tymoon.eu/clus/doku.php http://phoe.tymoon.eu/clus/doku.php - one can feel the language is dating. It has IMO too many weird semantics: no map and filter but map which takes a second argument telling the type of the structure or mapcar and others, remove-if[-not], etc. Creating hash-tables is too verbose and not consistent, et. That all a lot more are fixed in CL21 http://cl21.org/ http://cl21.org/ (its wiki https://github.com/cl21/cl21/wiki https://github.com/cl21/cl21/wiki). CL21 also offers more functional-oriented stuff like shorter lambdas, lazy sequences, generic functions, or string interpolation, regexp literals, and more. It's a bit under-documented, but its wiki is ok. - web dev in CL is another topic. I sugest https://stackoverflow.com/a/42838145/1506338 https://stackoverflow.com/a/42838145/1506338 but what's doable now is very elegant. - CL has a big ecosystem, we can use Emacs/Vim/Atom, Portacle is straightforward is portable and thus straightforward to use (https://shinmera.github.io/portacle/ https://shinmera.github.io/portacle/),…
- flavio81 9y agoIs Lisp a good choice (for a functional language)? If you want to program in stricly functional and only functional style, being totally forbidden of incorporating side effects into your functions (except via Monads), and want to feel a sensation of "types are checked and enforced everywhere, thus I can sleep happy", then go try Haskell. If you want to be free to do whatever you need to do, to apply the paradigm you need at every moment -- be it procedural, imperative, logic, aspect-oriented, object-oriented, functional... then Common Lisp is for you. If you need the full power because you know what you are doing, then Common Lisp is for you. Status of (Common) Lisp in 2017 - You can have a fully configured, ready to use, CL environment in under 5 minutes by downloading and executing Portacle. No configuration needed, it just runs and gives you Emacs, SLIME, Paredit, SBCL, Quicklisp and other nice tools. - Free books and resources are available, for example "Practical Common Lisp" - Package ("system") installation is damn easy with Quicklisp. Download package from the web, compile it and load it... with only one command: (quicklisp:quickload <package name>) - There are libraries out there for anything you need: REST services, web frameworks (many), JSON, machine learning, math, anything really. - There are many ANSI-compliant CL implementations out there, most of them free: SBCL, CLISP, Clozure CL, SICL, ABCL, LispWorks (commercial), Allegro CL (commercial) - Interoperability with C is easy with CFFI (there are other ways as well) etc etc. Lisp in 2017 is better than ever! - Interoperability with Java is easy with the ABCL implementation.
- nikki93 9y agoThere are many Lisps, they are not always like MLy languages like Haskell. Practical Common Lisp -> On Lisp -> Let Over Lambda with Keene and AMOP on the side are good for Common Lisp. Clojure has good resources too, Professional Clojure, Learning ClojureScript. For Haskell, CIS194 online from UPenn is good. I would suggest trying everything out and not being limited by what others think and the limits on what they can communicate to you with language. Where we are going we need your full expression.
- cosarara97 9y agoLisp is not used as a purely functional language. It has the tools to write functional programs, but most lisp code is procedural.
- throwaway7645 9y agoA very tough question. We would need to know more of your background. Haskell is purely functional, with anything impure cast as a monad I think. OCaml is nice and let's you use OO as well. F# is basically OCaml on .NET. Common Lisp is multi-paradigm (imperative, functional, OO, even logic)...there are several others as well. Clojure is a lisp on the JVM that tries to be just functional, but allows you to leverage Java libraries when needed. Clojure has a lot of good things going for it, but I understand that the debugging experience is inferior to Common Lisp as you mainly get Java stack traces. So do you develop on Mac, Linux, or Windows? Do you already know Java? Do you need multicore parallel programming? How much time do you have to invest?
- kbp 9y agoLisp isn't really a functional language, it just pioneered a lot of concepts in functional programming. It has almost no concept of immutability, imperative code is everywhere, and if you try to write in a pure functional style you'll probably find it awkward compared to something like an ML-style language. Lisp is a multiparadigm language. It has closures and higher order functions and uses them where they make sense; it also has a lot of imperative constructs, and a very sophisticated object system. They all work together and make Lisp a unique, interesting language. If you're only interested in the functional parts, you'd probably be happier with Haskell or Clojure.
- kronos29296 9y agoClojure is lisp actually. It is also mutable but it makes mutability as an explicit transaction but the entire thing runs on a JVM so you can use all Java libraries (so no library scarcity for lisps). So if you are doing heavy work it is either this or Common lisp. Clojure is preferable because Java has more momentum than CL.
- kbp 9y agoArmed Bear Common Lisp[0] runs on the JVM. 0: https://common-lisp.net/project/armedbear/ https://common-lisp.net/project/armedbear/
- kronos29296 9y agoSo does Frege [0]. (Your Haskell dialect that runs on JVM) But you know what compared to something like SBCL or Clojure they are just not that popular. They do deserve more attention though. [0] https://github.com/Frege/frege https://github.com/Frege/frege
- PuercoPop 9y agoYes, Clojure is a Lisp. Lisp is also the shorthand way people refer to Common Lisp. Lisp in the context of OP means Common Lisp. Common Lisp has an implementation, ABCL, which runs on top of the JVM. Access to the Java ecosystem is a shared trait, not a difference. Being a multi-paradigm language CL has a wealth of features That Clojure doesn't and they all play well together. Except for the type system and the class system. For example, it has places and the ability to define your own setf forms. Common Lisp makes iteration easy with the lisp macro. Common Lisp has tagbody and gotos so one compile FSMs efficiently Common Lisp has an object system were the semantics are describe using the same object system. So users can extend the object model according to their needs. Clojure is designed to support one style of programming envisioned by its hypemaster. Rich Hickey is a brilliant person, and has done an excellent job designing Clojure, but Clojure approach to 'user erros' is we don't guarantee to signal an error, we may do w/e. By momentum you mean it is trending. We know mainstream programming is a pop culture, but we shouldn't encourage it by recommending one language over another based a FAD.
- girzel 9y agoAs far as tooling goes, it's also much less of a pain to set up than it used to be. Quicklisp and Roswell[0] make installing and maintaining systems much easier -- together they're kind of like pyenv/pip for Python, or Opam for Ocaml, or what have you. [0]: https://github.com/roswell/roswell https://github.com/roswell/roswell
- xfer 9y agoSince you didn't say Common Lisp, i would suggest looking at racket: very powerful macro system with safety, support for static-type checking, contracts. Unlike common-lisp racket is mostly functional and has decent support for object-oriented programming too. Most importantly excellent documentation. Pretty much the best environment, i have seen academic people produce.
- peatmoss 9y agoAlso, DrRacket. While I generally prefer my emacs, "first learn emacs" is a pretty bitter pill to swallow for newcomers. Fortunately DrRacket solves that for both newcomers as well as experienced folk who just don't want to use emacs. Introducing folks to Racket seems to have a lower impedance threshold as a result. DrRacket looks a little dated in its vanilla configuration, but the layout of the editor / REPL parts can be changed around a bit, the color schemes swapped out. There's even a paredit mode for DrRacket. Overall, if I were somehow coding more exclusively in Racket, I could easily see using and extending DrRacket rather than my current emacs.
- reikonomusha 9y agoProfessional and open source implementations of Common Lisp are stable but nonetheless under active development. Many hobbyists and professionals use Lisp to solve their problems and make money. IDEs are in a sorry state. If you're an Emacs user, you'll be happy. Otherwise, unless you spend hundreds of dollars for a professional IDE, you won't have much. Editing Lisp requires a good IDE.
- vram22 9y ago>Many hobbyists and professionals use Lisp to solve their problems and make money. Is there anywhere that one can read about such cases? Would be interesting to read about both how well they are doing and what sort of apps they use Lisp for making.
- slightlyCyborg 9y agoThe stability of something like SBCL feels nice after a year in Clojure.
- deleted 9y ago[deleted]
- oblio 9y agoAny recommendations for a Lisp IDE outside of Emacs? Also, aren't there any other OSS or free Lisp IDEs outside of Emacs? Or are they all crap?
- vindarel 9y agoYes, we have Vim and Atom plugins: https://github.com/CodyReichert/awesome-cl#text-editor-resources https://github.com/CodyReichert/awesome-cl#text-editor-resou... And [Portacle](https://shinmera.github.io/portacle/ https://shinmera.github.io/portacle/) is an Emacs shipped with SBCL, Slime and Git in a portable and multiplatform way, so it's straightforward to begin with.
- tnecniv 9y agoPretty much everyone I know that does lisp uses Emacs + SLIME.
- kronos29296 9y agoHaskell is the pureset functional language. If you want to learn the principles behind the functional programming paradigm learn haskell but its hard. The effort is worth it. But there are situations where the performance is worse compared to other languages but it is the best place to learn FP. If you are hacking on stuff or doing it as a hobby, learn Scheme. Something like Chicken Scheme is good. Small concise language but a great scarcity of libraries. If you want a pretty ide for scheme or write your own scheme use Racket. If you want production code in lisp with good library support use Common Lisp. Clojure is better because of better functional programming features than CL but debugging requires knowledge of Java as it runs on a JVM but the plus is you can seamlessly call java libraries which are numerous (more than what is in CL). OCaml is functional programming with Objects. It it used where there is a need for performance like compilers with the advantage of a functional paradigm. But OCaml is a pain to work with for any Non Unix systems. F# is functional programming for dotNet. Then there is Scala which runs on JVM like Clojure and so has the same pros and cons except Scala is closer to OCaml and Haskell than to Lisp.(ML family) Depending on your platform make your choice. OCaml is horrible for Windows. Haskell works. Scala and Clojure just need java so platform makes no difference. Schemes mostly have an interpreter for most platforms. Make your choice.
- ScottBurson 9y ago> Clojure is better because of better functional programming features than CL CL now has [shameless plug] an excellent functional collections library, FSet [0]. Using FSet greatly expands the range of algorithms that can easily be written in a functional style. It's been a while since I looked at Clojure, but my impression is that FSet has a substantially richer API, including a bag (multiset) type and many more operations. I don't know exactly which Clojure features you have in mind, but I suspect that FSet makes CL at least as good for functional programming as Clojure. [0] https://github.com/slburson/fset https://github.com/slburson/fset
- cronjobber 9y agoDoes Clojure predate FSet? If you hadn't written "now" here, I'd have guessed otherwise. My only complaint about FSet would be map default values; not necessarily the fact they exist, but (1) when using defaults, that two maps can compare equal even though they have different defaults, and (2) when not using defaults, the way they nevertheless intrude upon the map-union protocol, necessitating handling of otherwise unused default values (usually NIL). But I love FSet when using CL. Thank you for writing and publishing it!
- pjmlp 9y ago> Can somebody comment on the status of Lisp in 2017? Sadly the only Lisp environments that resemble in any way the old Lisp Machine or Xerox PARC ones are comercial. Emacs is kind of ok with SLIME, but it still isn't the same as using Allegro Common Lisp[0] or LispWorks [1]. [0] - https://franz.com/products/allegro-common-lisp/ https://franz.com/products/allegro-common-lisp/ [1] - http://www.lispworks.com/ http://www.lispworks.com/
- oblio 9y agoThe Lisp Works page is kind of cute, but in bad way as far as marketing goes, at least in my opinion. The IDE screenshots for Windows show off Windows XP.
- pjmlp 9y agoI don't know how the actual UI currently looks like, but even if it still looks like Windows XP, the IDE and Common Lisp compiler are still quite ahead compared with what Emacs + SLIME are capable of, specially in GUI related Lisp development workflows. Maybe they could improve their marketing message, but I doubt most wannabe Common Lisp developers are willing to pay for comercial tools, with enterprise prices, even if they had the best marketing of all times.
- xfer 9y agoAlso, unless you are heavily invested in CL, most people actually can't afford to pay $600 on a compiler license per year.
- fiddlerwoaroof 9y agoLispworks has a free "Personal Edition". It's good enough to get through something like Practical Common Lisp and get a feeling for writing lisp, however since it uses an old version of ASDF, it's a bit difficult to use the "modern" quicklisp ecosystem.
- lispm 9y ago
- brudgers 9y agoTo me, the idea of functional languages seems a bit of the wrong abstraction and functional programming style is a better one. Sure some languages make it easier or harder to program in an imperative or functional (or object oriented) style...I mean it is easier to program in an object oriented programming style using Smalltalk versus Common Lisp (even though CLOS is robust) and much easier to program in an imperative style in C than Haskell due to the way Haskell treats non-idempotentcy. In 2017 the status of Lisp is about the same as it has always been only more accessible than ever given faster networks over which to download tools and to find documentation...e.g. the Racket ecosystem. And a person who starts exploring one of the Lisps today will learn as much or perhaps more (due to generally better access to diverse information about programming) than at points in the past. My opinion reflects my bias, but in general I think Lisps are more accessible than Haskell because there has been more time to smooth over the rough edges related to the more significant underlying mathematical/theoretical concepts (lambda calculus versus type theory) and perhaps because lambda calculus is a bit more easily understood than type theory (or perhaps not). There's also a much stronger pedagogical tradition of Lisps as teaching languages (forty years or so) at the undergraduate level than with Haskell. But in the end, why not both?
- WalterGR 9y agoThere was a good amount of discussion about what Common Lisp has to offer vs. other programming languages in the comments on this: The Common Lisp Cookbook https://news.ycombinator.com/item?id=14661239 https://news.ycombinator.com/item?id=14661239 262 points by macco 9 days ago | 184 comments Not so much about CL vs. functional languages, but it gives a sense of the current scuttlebutt about CL.
- yogthos 9y agoI would definitely recommend looking at Clojure. It's one of the more widely used functional languages in the industry. There are lots of large companies such as Amazon, Walmart, and Boeing using it for mission critical stuff now. The fact that it runs on the JVM and makes it easy to interop with existing Java code makes it practical to integrate in many organizations already using this stack.
- Jach 9y agoYou might be interested in reading this state of the ecosystem for 2015: http://eudoxia.me/article/common-lisp-sotu-2015 http://eudoxia.me/article/common-lisp-sotu-2015 I wouldn't expect things to look any worse since then (an interesting characteristic of Lisp is that unlike say JS materials which are a few years old are often obsolete, there are lots of excellent multi-decade-old Lisp references and code you can still use).
- neutronicus 9y agoFWIW, I reached for CL to do some scripting and found using UIOP for filesystem tasks (as recommended here) intensely painful.
- Jach 9y agoGood to know, I haven't used it. I haven't really done much with scripting in Lisp (I think I'm actually still within the first 10k written lines of it, for whatever that metric is worth) so for filesystem and OS tasks I haven't gone much beyond the standard and some sb-ext functions. I don't really have a need or desire to move from bash or python for scripting; it's the larger programs that make me wish I had Lisp around when I don't.