There's a good talk by Scott Fritchie on the differences between Pony and Erlang that I would suggest.
talk: https://www.youtube.com/watch?v=uv-3ptTD8hg&feature=youtu.be slides: https://github.com/slfritchie/wide-world-of-actors
Like Erlang, each Pony actor has a mailbox that is processed in a serial fashion so that only one message is being processed.
In Erlang, you have selective receive that allows you to receive messages out of order that they arrived. Pony has causal messaging where each message has to be handled in the order it was received. Otherwise they are same in terms of how received messages are handled.
There's no `receive` in Pony as the behaviors are called directly.
I would not call that "very limited and bare bones". Its different.
The Pony runtime takes care of scheduling an actor to run when there is a message for that actor. The actor runs through the behavior and then waits to be scheduled again by the runtime when another message is available. If you want to filter messages you need to arrange a way to do that in your code. There's no way to inspect the message queue.