Erlang gets mentioned a lot and there’s a Joe Armstrong name drop at one point when talking about why Pony doesn’t embrace the Erlang “let it fail” philosophy. Really thoughtful discussion about the strengths and weaknesses of the actor model in general. I hope others enjoy.
It was fun until I heard the word classes, I’m out.
Exactly my reaction when I was brought to school at 6.
“Reaction”? I clearly remember screaming and crying.
I saved screaming, crying, and despairing until I saw the so-called Clean Java Code.
I was looking at Pony years ago before I understood what the actor model was or even had concurrency problems (that I knew of ). I didn’t get very far as it was beyond my comprehension at the time but looking back it’s a very cool language. It does have objects, but it’s not typical OO by any means. For example, it doesn’t have inheritance! Also, Joe Armstrong has highly praised Pony in a talk before saying that it was the only other language that did concurrency properly.
Otherwise, as far as writing off languages with objects go, remember what the “O” in OCaml stands for
No, that led to loss of faith in humanity.
Might be a good pick for low-level stuff, as I don’t see myself picking up rust anytime soon and zig sadly doesn’t offer any solutions to deal with concurrency.
Ya, that was the other reason I never went further with it… I’m a web dev and years later still am
On topic: at least two years ago I quicky tired Pony and actually kind of liked it. Gave up on it because the speed of development looked pretty slow, and because there were practically no libraries.
But nowadays I’m not seeing what Pony does better than Rust except (1) being terser which is not a small advantage actually, and (2) much smoother learning curve. Butt I’ll stick to Rust in the statically strongly typed languages area (that compile to native executables).
Pony’s memory management model seems far more intuitive, at least to me. The idea that you define reference capabilities at initiation of the memory versus tracking lifetimes through a black box borrow checker just makes more sense. I will admit I have yet to write any Pony code so I don’t know if it would be nicer in practice.
That could be said about 99% of all other languages other than Rust.
…and btw the borrow checker is not black box at all. It just takes a while to truly grok.
I remember thinking the borrow checker was somewhat intuitive when I was briefly learning Rust. I’m very likely being very simplistic here as I’ve barely even written a toy program in Rust but I remember thinking, “Oh, so this is just forcing me to do what I try and always do anyway…?” Again, likely being simplistic/ignorant here Then I think it got into—I think it was futures?—and my eyes glazed over at the syntax alone and I haven’t been back since.
Maybe Nim? It has async/await for concurrency
Same.
I have several successful async Rust apps under my belt but boy I almost wanted to slash my wrists while working on them. And sadly the ecosystem was still changing sort of rapidly back then so I was denied even the opportunity to have a lasting memory of a stash of valuable arcane knowledge.
Just yikes. Can’t bring myself to solidify the knowledge of modern async Rust in my head as of today. Just PTSD all around.
Yeah, async Rust is what led me to give up ultimately. That and I got used to not fighting a compiler all the time writing Elixir. I will say the concurrency/parallelization in Rust was a breeze. I was a total neophyte and got Rayon working to process 1000x what I was able to do single-threaded relatively easily.
Rayon is trivial and even that’s putting it mildly; you literally replace .iter()
with .par_iter()
in your code and you’re sorted.
Proper async is however a huge chore. And documentation is scattered across multiple Rust crates. You really have to go on a journey deep into the rabbit hole.
Though maybe some of the better LLMs like Claude could help.
that was my point. it was my first experience with parallelization and it was the simplest thing ever. It might actually be simpler than parallelization with Elixir.
Async, though, like waking up in a nest of spiders.
I guess there’s a reason the Rust marketing was “Fearless concurrency” and not “Fearless async.”
I think tokio is simple too
It’s not simple at all once you start doing non-tutorial apps. Plenty of problems nobody warned you about.