Pony language 0.11.0 released
pony.groups.io
pony.groups.io
it's from the phrase "and I want a pony"
Have you watched the last couple of seasons? I liked them more.
I'm definitely keeping an eye on it and I'm very excited to see its development continue.
Scala/Akka would be another choice but it has totally different semantics from Erlang, and you can never forget you are working in an async model.
I spend my days writing a soon to be open sourced distributed system in Pony. The "alternative" to threads/mutexes/channels is actors which from a concurrency model perspective makes it very like Erlang. The GC model is also very like Erlang.
In the end, it is its own thing.
If you have each part of your code running on different processes, then failures are isolated.
Unless I'm reading your question wrong...
On top of that you also get automatic failover for distributed apps(0) that are supposed to run on only one node at a time, handled entirely by the runtime, with takeover, etc.
If you're using Elixir, you should probably actually read up on the technology you're using. These are basic concepts explained in, for example, "Programming Erlang".
0 - http://erlang.org/doc/design_principles/distributed_applicat...
You'll set up the ability for them to coordinate (by simply setting their longnames and setting them all up to connect to one machine, making them create a mesh network) and transparently you'll now have several machines working on something as if they were one, with minimal effort on your part.
The big downside to using distributed erlang is that it has very little to offer in terms of security. If you don't add something yourself (which admittedly isn't too hard) you'll be relying only on a common password for connecting to the mesh, as well as knowing which machine to connect to. Obviously it makes for a situation where it's best and most appropriate to use on your private network, setting up other means of communicating with public networks.
The actor model is asynchronous by definition. Did you maybe intend to say something else? What makes Erlang different is that the BEAM VM is made for the actor model, so it has per-actor GC and other things that are basically impossible in other languages that don't use BEAM.
In Akka, you must use asynchronous I/O directly, or use a thin abstraction such as Futures with monadic bind to accomplish the same thing. Under the covers, the Haskell and Erlang runtimes are handling this for you so that you can forget about the fact that you are doing async I/O.
In Akka, if you don't pay attention to this and use a non-NIO Java library to do I/O, you will block the entire scheduler. Whereas, every library in the Erlang and Haskell ecosystems already uses the async I/O abstractions in the runtime.
For sure the independent execution of the actors internal logic is a fundamental property of an actor system. However I think communication APIs between actors don't have to be asynchronous by definition: In Akka they are, because blocking threads woul kill the performance. In Erlang synchronous communication between actors works fine. The C# Orleans framework also favors "synchronous" communication - yes, actor communication returns Task<T> results which can be awaited, so it's async unter the hood - but I consider that an implementation detail). Pony in contrast leans to purely async APIs. There's no way to actively wait for a response from another actor. The advantage is that deadlocks are not possible at all, whereas with synchronous actor communication you can deadlock when 2 actors are waiting upon each other. The drawback are callbacks and the need to model everything as a state machine.
There is no such thing as synchronous communication in Erlang!
When coding in Erlang you better remember this. The primitive operation in Erlang is the async message send and that's it.
Sync messages are built on top of async send, blocking receive blocks and a lot of overhead involving linking and monitoring (because the process you're sending to may die before the message arrives or before it can send the response).
All this is handled by gen_somethings (`gen_server:call` does this, for example), but sync messages are not the basic primitive in Erlang. They may work, but they are not trivially implemented - I know, I tried working without OTP for a while. I reimplemented a lot of edge-cases handling in my project back then and when I finally checked library sources I was shocked to learn that it was still less than a half of what was needed...
I love to judge things for what they are, and not what they're named or related too, but given there's so many languages fighting for my attention, this one is hard to swallow.
I'd be happy to discuss via email if you want. My address is in my profile.
Unless they create their own intermediate language, so that they can do as much work as possible, before passing the bucket to LLVM.
Hence why Swift has SIL, Rust MIR, and so forth for other languages.
Nanopass is one approach to compiling that tends to be more general.
However, LLVM is great if you just want to compile without learning the intracies of assembly. It even gives you access to multiple backends.
Linking against a framework let's you get up to speed faster, and someone else handles the security in your compiler, for the most part.
But, when you need flexibility, you'll probably need to do it yourself.
(See Scala and Dotty, as Scala becomes even less Java-like).
It doesn't have the rust problems with manual locking and deadlocks, and the C++ syntax horrors. It's also smaller and faster than those.
We still have tons of work to do in general. There's a paper on how to do distributed actors with Pony but as yet, we haven't implemented anything yet. We started but deprioritized it.
I came across one comment where the author seemed to think the main gurus were no longer working on it. e.g. here: https://www.quora.com/What-is-your-experience-with-using-Pon...
I myself don't have much knowledge of Pony,which is why I ask...
https://github.com/ponylang/ponyc/commit/eaf1dcd525c691feae1...
The Pony development community is still relatively small but we make good regular progress. We all wish the community was bigger and we were progressing more quickly but that is always going to be the case.
We have a regular weekly development Zoom call that is open to the public. Feel free to join. Info is available in the Pony development groups.io group: https://pony.groups.io/g/dev/calendar.
If you join the development list, you'll also get access to the recordings of the sync meeting going back close to a year. There's a wealth of info there for anyone cares to dig in. Probably more than anyone would care to ever listen to.
* Type-system for machine specific data (local vs foreign actors, e.g file descriptors, ...)
* Node failure
* Distributed GC (pointer identity => random id)
* Distributed work-stealing (CNF-ACK protocol, user-specific scheduler rules: moving cost, ...)
There's also more work going for more formal proofs.
Here is a bit of explanation: https://www.youtube.com/watch?v=KIziz1c41ww
"Development status: Everything we talked so far is real and is in use. Runs on everything from a Raspberry PI to 4096 core SGI Windows OSX Linux FreeBSD Performance is competitive with C/C++, often better as core counts go up"
Esp. the last 10 slides.
Certainly as the new community members have stepped up the nature and style of the community has been influenced and evolves and not everyone has necessarily liked those changes (as per Quora comments) but I think the language has benefitted.
Languages, like operating systems - are often identified with the original designers - but it takes a community to grow it and ensure continued growth. Pony's community is still small but folks are actively contributing to Pony's growth and maturity. The language still has a long way to go but its fun to use and its got some interesting ideas that are worth exploring.