Should I learn Lisp? I'm going to read SICP and want to know if I should try to further myself. Also, what dialect...

Should I learn Lisp? I'm going to read SICP and want to know if I should try to further myself. Also, what dialect, Common Lisp or Scheme?

Attached: Lisplogo.png (811x805, 29K)

Other urls found in this thread:

github.com/positronic-solutions/pulley.cps
en.wikipedia.org/wiki/Greenspun's_tenth_rule
github.com/CodyReichert/awesome-cl/blob/master/README.md
portacle.github.io
anyforums.com/
twitter.com/SFWRedditImages

Don't read SICP. Read David Touretzky's book about Common Lisp. You will turn into a wizard.

No. It's slow as fuck. If you must, learn Scheme. If you think (insert language here) is bloated, you haven't seen Common Lisp.

common lisp is dead, scheme dialects are at least extant
but clojure is unfortunately the most practical lisp today

Use Steel Bank Common Lisp (SBCL). Common Lisp is dead, but SBCL is regularly updated and fast.

>Should I learn Lisp?
yes
>I'm going to read SICP
Good, it's still relevant, especially if you're not a dummy.
>Common Lisp or Scheme?
Do SICP in Scheme, but for real world applications use Clojure.
>unfortunately
Why?

clojure isn't as elegant as scheme

but it runs on the jvm and that's all that matters.

I used to think so before I started working with Clojure. Didn't like all the added types of parens, def instead of define, that lambda is fn, etc.
I have to say I changed my mind and now think Clojure is the best lisp. The abstractions are better, you have true immutability, structural sharing, excellent concurrency syntax and polymorphism.
Is it a good thing or a bad thing in your opinion?

Learning Lisp is good, because it gets you really, really used to lambdas and closures, and that's gonna make writing good multithreaded and asynchronous code a lot easier.
And honestly, it's just plain fun! Lisp's expression-based, so you can compose basically any two constructs in any way you can imagine. Means it's crazy flexible, and you can have a lot of fun slotting things together in weird ways and having them work.

It can only be a good thing when it comes to the real world because people consider Java like the fucking savior of humanity, so learning programming languages that interact with the JVM is really good when it comes to deployment. VMs are the future when it comes to infrastructure and deployment, so learning a language that interacts with the JVM, ANY LANGUAGE, can only be good. And even if somehow the JVM fails, you have other JVM projects like GraalVM that are starting to gain some tractions because people are understanding that it makes deployment really easy.

We're starting to live in the future with that shit. Slowly but surely. This can only be the future!

racket because the others have absolute trash development environments and/or libraries

Ironically, because people thought Java was all the rage, so many engineering hours were spent on the JVM that shit is actually good. Supposedly it has excellent GC, JIT compilation and dynamic analysis and optimization, so if you're able to write in a language which isn't insufferable but takes advantage of the JVM, why the fuck not?
It also keeps management monkeys happy if you give them jars instead of scray binaries from "obscure" languages.
Clojure has excellent DEs and libs.

>no reader macros
>no proper tail recursion
how can you even call that a lisp

go back to your java overlords

As Rich Hikey said "It's okay to love the JVM and hate Java at the same time". The JVM and other VMs are the future of programming and investing your time in that shit is going to skyrocket careers. Calling it now.

Attached: seqs.png (728x2184, 516K)

note that lazy-cons was replaced by lazy-seq before version 1.0 was released

>>no reader macros
I thought we have them. Maybe it's a distinction I'm not getting. Could you provide an example?
>>no proper tail recursion
That's on the JVM but the second they'll add it you'll get in in clojure.
In the meanwhile Hickey cheated and wrote recur which basically does the same thing. You have to ask at some point of there's even a difference, functionally.
>how can you even call that a lisp
what are your criteria for a lisp?
>go back to your java overlords
RUDE!
Never written a line of Java in my life, desu.
So are you telling all the purists to... have seqs?

>no tail recursion
We usually don't need it thanks to lazy seqs and recur, but there is a library for it:
github.com/positronic-solutions/pulley.cps
>Java
I don't want to write Java but it's sweet relying on statically typed dependencies.
>reader macros
I think other lisps lets you read the form character by character in an additional macro processing step... I guess? IIRC, Rich doesn't want this because he thinks it would make it harder for people to collaborate on a common basis.
>have seqs
haha

I have to admit I never got deep into Common Lisp. Scheme seems so much cleaner. Clojure even more so.

I agree with the general sentiment that the JVM is a nice vehicle for Clojure. It's just a pity that startup is so slow.
This is also true for the Clojurescript variants. That basically means I will not use it for my personal projects until the GraalVM really takes off.
Maybe I'll have a look at Joker or one of the other variants.

But back to the OP, just learn Scheme for now. Racket is a good place to start. It is slightly incompatible with SICP because cons is not mutable (they have mcons for that).
But many of the things you build along the way (especially streams, chapter 3) are available in the standard library for you to play around with after learning about them.
In any case, make sure to do the exercises (even if the first two chapters might seem boring) and preferably pick some small project to work on. Perhaps one year in Advent of Code or some other coding puzzles.

Regarding startup times, Clojure shines in programs which run for days, so the startup time doesn't really matter there. If you want to run it for short passes, why not compile it with Graal?

Yeah I agree with Clojure is at its best when you use it for server back-end and shit because the startup time LITERALLY doesn't matter one iota. Plus one the start-up is done the program is usually lightning fast. It's an excellent tradeoff. You obviously don't script with Clojure.

>it's totally not bloated

> No. It's slow as fuck
> If you think (insert language here) is bloated, you haven't seen Common Lisp.
> common lisp is dead

Kek.

Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
- en.wikipedia.org/wiki/Greenspun's_tenth_rule

Attached: redpilled-language.jpg (829x520, 50K)

>compiled languages are faster than vm languages
stop the fucking presses!

wtf, clojure is great

Learn Common Lisp. It's a pretty good language and has a variety of implementations that are compatible with each other, something Scheme lacks. SBCL is the most popular one, but there are also implementations that compile to C or run in the JVM.
Here's some resources to give you an overview of what you can do and where to start.
github.com/CodyReichert/awesome-cl/blob/master/README.md
And if you don't want to fiddle with Emacs and want to jump straight to learning you can use portacle.github.io to get a complete environment for Lisp.

so what JVM languages should one learn beside Java? Is python viable