4 comments

[ 3.5 ms ] story [ 12.2 ms ] thread
Celluloid supports this pattern out of the box with `every(N)`, `after(N)` and `timeout(N)`. N.B. I wrote the modern Celluloid Timers implementation. Celluloid is a Ruby actor framework.
I learned a bit of Erlang, played with Elixir and LFE (Lisp Flavored Erlang). They're all good, and it just comes down to syntax for me at this point. You said you were using Pony for work. Is Pony stable for real work, and how do you think it compares to the BEAM languages above?
Erlang and BEAM are much more mature than Pony. If maturity is a primary concern, you shouldn't be looking towards Pony at this point. Play around with it, sure, but not take it to production. We had a special set of reasons for going with. We find the concurrency model to be easy to reason about, love the type system and love the performance. You get C type performance.

Pony is stable enough for us to make the tradeoff for what it gets us in terms of lower resource usage, excellent latency and general performance characteristics.

All of the BEAM languages are untyped. Pony has an excellent type system that can make guarantees about the correctness of your program at compile time.

BEAM languages can draw on OTP which is a huge win. Pony has a very small standard library at this point. The library size is offset by its excellent C FFI but if you are looking to do distributed computing where performance is not a primary concern, you are better off with a BEAM language.

Erlang has QuickCheck and a wealth of other tools that aren't available for Pony right now.

Pony was the right language for us, we believe in it and its future but for most people right now, it's probably not the right choice. I'd be happy to talk over email if you have more questions. Feel free to drop me a line: sean@monkeysnatchbanana.com