3 ms·
Common Lisp is a great choice for many purposes. (And, if you're doing a startup, a fringe language like CL is a good way to find and attract some of the best
by neilv 2y ago
Common Lisp is a great choice for many purposes. (And, if you're doing a startup, a fringe language like CL is a good way to find and attract some of the best hackers, and avoid all the Leetcode grunts.)
Just comments on the Scheme/Racket parts...
> I looked at Scheme, but that community seemed to still be fractured over the r6rs/r7rs mess.
Things were fractured before R6RS, with very little portable ecosystem code, and then R6RS didn't solve that, but AFAIK, people got back up on that horse, started over, and have been embracing R7RS.
> Also, there wasn't a big enough ecosystem to suit my liking.
There's a reasonably-sized ecosystem, but three things:
1. Unless things have changed recently, much of the good stuff is still in the package system for a particular implementation (like Racket, "https://pkgs.racket-lang.org/ https://pkgs.racket-lang.org/", or Chicken, "http://eggs.call-cc.org/5/ http://eggs.call-cc.org/5/").
2. It's nothing the size of Python or JavaScript.
3. Don't believe any claims of "batteries included"; you often have to roll your own basic packages for real-world work. (But this can actually be a blessing, even for startups that have to move fast, depending on what you have to do, and how capable you're willing to rise to be.)
> I'd already tried Racket in school and didn't like it. The runtime was a bit slow and bloated for my tastes.
Although CS professors are some the greatest friends of Scheme (having designed and made much of it), CS professors can also be the worst enemies for real world use of Scheme.
Before Racket, most people who had heard of Scheme knew it only from school, in problem set homework for the dense SICP course, or from whatever pet intro CS textbook their professor wrote. That's a good way to never want to try Scheme again. (And it got worse as many CS departments became optimized Leetcode->FAANG hiring funnels.) Then people never saw Scheme used, nor even described by, real-world programmers, for real-world things.
So Racket (PLT Scheme) comes along, and half of the handful of people thinking of Scheme as a language for real things gravitate to Racket, because they are doing some real-world things. And overall it's one of the best programming languages out there.
But still, although the Racket CS professors include some great programmers, Racket is determined by CS professors, who do PL and CSE research, and write and teach textbooks. So, Racket's use in intro CS classes seems to perpetuate the tradition of CS professors ensuring that students will never again want to touch Scheme after they get a passing grade for the class.
- nsm 2y agoRacket's Chez Scheme backend, which is the default for several years is faster than python and ruby, and raco distribute gets you a smallish package with just your program, portable to the major OSes. Smallish = 40mb, which is probably comparable to other dynamic lands that don't come preinstalled. I find the "I tried it years ago and it wasn't as nice then, so I'm not gonna look at it again" attitude quote off-putting. It's the same reason Java still gets so much hate after over a decade since Java 8. I agree that CL and Closure probably has more real world shipped products. However, if you are considering a newer and smaller ecosystem like Janet... you owe it to yourself to look at Racket with fresh eyes.
- hajile 2y agoWe're 12 years since the release of r7rs-small and there's still no standard library as r7rs-large is essentially MIA. I remember seeing that they'd done a preliminary release of just one small part of r7rs-large. It was existing functionality and basically copied what already existed, but still somehow took over a decade. This is important give the history. R6rs was an attempt at an actually-usable scheme spec. R5rs isn't usable as described because there's way too much undefined stuff to actually get up and running in a semi-portable way. This problem exists BEFORE discussing the SRFIs which are quasi-standards except that every implementation supports a different subset and they aren't documented outside of the spec documents which themselves generally aren't fully specified. Scheme the standard killed itself and Racket survives because it completely avoided the illusion of compatibility entirely.