As mentioned above there are two major forms of message passing, by-reference and by-value. The kind of message passing used is determined by the kind of marshaler used to convert requests into bytes (and vice versa).
Straightforward client-server applications frequently do not require pass by-reference semantics as objects are relatively simple and do not have relevant identity. In such cases, pass by-value is sufficient. Examples of this are typical data-oriented servers such as databases and HTTP servers.
Note that pass-by-value may result in large amounts of data being passed around as entire object graphs rooted in the request arguments are marshaled and sent. Passing by-reference is generally more efficient in terms of bytes transmitted but may require more remote message sends due to the cross-space references. On the other hand, passing values means that during computation all arguments are local so the number of remote messages may be significantly reduced.
References have some other, more subtle advantages. The most important is that they maintain object identity. At a purely pragmatic level, they also promote polymorphism as they enable implicit remote messaging. Regardless of whether a variable (foo) contains a local object or a remote reference, the code foo doSomething will execute. Without remote references you must explicitly code for remote objects. An illustration of this can be seen by comparing the sendPing:with: methods in the ping-pong example.
There are of course disadvantages to this simplicity. Using implicit remote references it is very easy to explode the inter-space dependencies and create distributed garbage. Even though SST contains a distributed garbage collector, collecting garbage is not as good as not producing it. Execution semantics can be corrupted using remote references. For example, invoking value: on a remote reference to a block that performs an out-of-scope return will not have the intended effect.
Overall, which message passing mechanism is best depends on the demands of your application and its computing characteristics.