So if erlang and clojure are superior but tragically underused in spite of having some big projects/tools to show, how is it helpful for haskell to try to have one as well?
I think I understand the sentiment of the above commenter. I feel it with Lisp too.
There are amazing claims about how Haskell (or Lisp or Erlang or ...) give you these amazing superpowers and allow you to write immensely more correct programs immensely faster. That could be true (and I personally do believe it’s true). But then where are all of these immensely-correct fast-written programs? I don’t buy the pg-inspired secret-weapon lurking-in-the-shadows argument unfortunately.
In C, C++, Java, and Python—even Pascal!—it’s not even funny how many examples there are. It’s nearly limitless. The superpower languages struggle to come up with just a handful of examples.
What I personally observe in the Lisp and Haskell world is that people like to write purportedly useful “reusable” libraries, and nobody likes to write applications. A very select few are successful at these libraries (where success = broad adoption), but most of these libraries are intellectual games and puzzles that benefit almost zero “working programmers”. Lisp has plenty of libraries to do pattern matching (great!) but basically zero for putting up a native GUI.
(As a self-deprecating anecdote, my first instinct writing Haskell many moons ago was to create a library of all of the major abstract algebraic structures found in pure math. You can imagine how many people that library would benefit.)
A lot of this also has to do with not the language, but the tribal nature of programmers and their acceptance of other tools in their chain. The Linux kernel will never accept a patch written in Common Lisp, and a lousy middle manager will never let you write your domain logic in Prolog. Nobody wants to figure out how to integrate GHC into their CI/CD. Most people have little patience to figure out how to write good C code that integrates with Erlang’s FFI.
I’m being a little flippant in my description of the state of affairs, but I think the spirit of it is correct.
I think the commenter is right. If any of these languages will be successful, there have to be many, many successful programs written in said language where the language’s benefits tangibly pay off. Having one or two Hail Mary projects doesn’t really mean anything.
What's funny is that Rust, in its short life so far, is already popping up in important projects. Firefox, obviously. cURL now optionally uses Rust for... something. Big companies are using it: Microsoft, Dropbox, etc. Some Linux libraries (there was an image library for Gnome/GTK, IIRC). Even the Linux kernel may allow certain kinds of modules to be written in Rust.
But everyone still shits on "Rust Evangelists" when they bring it up. You just can't win! :D
I think the biggest reason for that is that Rust is fundamentally a systems programming language that is significantly more productive and safer than C/C++.
I don't think "more productive" is clear (in the sense of building software on less money). Measuring engineering productivity is basically impossible at this point. But it clearly eliminates a whole class of footguns that are tolerated in C++ just because we need a fast systems programming language.
This is easy to measure because it refers to properties of applications (performance and vulnerability-density) rather than properties of the development process.
Rust also seems to reduce the need for a ridiculous guru at your company to help keep programs correct. That is easy to identify and measure. Haskell doesn't seem to do this. If I imagine running a team of 80 people on a Haskell application vs a Java application, do I feel like I'll need fewer Haskell gurus? No.
>> What's funny is that Rust, in its short life so far, is already popping up in important projects.
Rust was sort of co-developed along with Servo with the intent to be used by Mozilla. For all the others using Rust, it solves immediate problems that people have been having for years. When you're going up the learning curve and fighting the borrow checker, you can rest assured that the pain is in exchange for eliminating entire classes of bugs. That is an unusual situation in the world of languages.
I think it was originally written in C, and it apparently approaching being fully Rust.
Rust claims very loudly, repeatedly, and apparently with honesty that "gotta go fast" and safety are language design goals and features. So I'd imagine even a developer who just wants to get their hands dirty with Rust would be willing to do battle with the borrow checker since there's a good chance they'll eventually hit those goals that they share in common with the language itself.
Does Haskell have "gotta go fast" as a central language feature? If not, that'd be a real gamble for an SVG renderer. After all, what's the use of a library that produces the output you'd expect, but also at a speed you'd expect for a kludgy, over-engineered, text-based vector image format?
> But everyone still shits on "Rust Evangelists" when they bring it up.
Yes, but the language forces them to shit on it for reasons other than "not being fast." :)
Even the way you state this I feel is being dismissive of an important aspect of reality. I don’t think popularity is the root issue. It’s not that it has to become popular, it’s that the people who use the language have to write useful things in it.
Almost zero people writing lens libraries in C, almost no people are writing state-of-the-art asymptotically optimal Cool Tree data structures in C++.
Almost all users of these languages are writing an application that isn’t designed to serve the intellectual needs of the programmer themself.
My impression of Haskell is that (1) people who use Haskell as a hobby often write libraries to show off (2) people who use Haskell professionally write proprietary software.
One of the problems with languages like Haskell, Erlang, and Lisp is that they’re so flexible that you often don’t know what you’re getting into when you read somebody else’s codebase. You often see projects written in these languages with a small core team that understands e.g. SBCL and the various macro libraries they use to get work done, or Haskell and the monad transformer stack they use in their app, and it’s very hard over the long-term to on-board new team members and bring them up to speed at a rate which keeps the team healthy.
Maybe this is an inherent problem with “flexible/powerful” languages.
There are a few Haskell tools around that people do regularly use—Git Annex, although Git LFS seems to have edged it out in popularity, and Pandoc, which I’d say is powerful and irreplaceable.
Maybe zero people are writing lens libraries in C, but C does have a fair number of different string libraries around, exception / error handling libraries, and a bunch of people churning out terrible “single-header” libraries which only exist because average C programmers aren’t good at working with common, mediocre C build systems.
Hmm, well, it seems to me that if a language is not globally popular there will not be many jobs in it, so thing things that get written in it will be those things that are personally interesting to the authors. I don't think that necessarily speaks to the unsuitability of that language for personally uninteresting things.
I thought your point about bootstrapping to popularity was a good one. It's not easy but I'm convinced that Haskell is good enough that it's possible (in fact I think it's inevitable that either some Haskellish language will become popular or some popular language will become Haskellish).
>But then where are all of these immensely-correct fast-written programs?
Ah, the Fermi paradox of programming languages. I wonder what the appropriate terms should be for the Drake equation of language adoption? I definitely think there is a factor for users originally attracted to shiny new objects, who then discover shiny... Oooooh, Idris!
Haskell is very hard and enables you to solve hard mathematical problems precisely.
When getting results exactly right matters, Haskell shines. Crypto nerds like it, bankers like it, hardware designers like it. Web devs don't like it, despite a plethora of dmeos of how it's possible to use Haskell, because being exactly right just doesn't matter and isn't worth the extra effort that Haskell mandates.
First, I've made no pretense about speaking for Haskell's interests, I am speaking strictly about my own wishes. While I think our interests are aligned, I'll let you be the judge. What would be good for me as a curious developer interested in the language, and who has had a years-long low-level FOMO about it, I would like to be able to wade in and do something with it, like I did with Clojure and Erlang, confident that I could, in the end, make it do stuff (since others had already made it do stuff, first).
I do really honestly believe that Haskell needs a "paragon project" like Matrix or Jepsen that has proven itself useful to the world without respect to its Haskellness, and then show that this solution was much easier in Haskell.
I keep getting down-voted on this thread, and I expect it to continue. Friends thought I was nuts to give up on Lost after season 1, or The Hobbit after movie 1, or the GoT books after book 3. After years of hearing much talk and seeing no walk, I'm giving up on Haskell. More than that, I'm going to call out anyone talking it up to give specifics because literally everyone I've every spoken to about it gives it a very high regard, but have never, ever written a line of it.