On 2/12/12 11:15 AM, Steve Wart wrote:

Can the distributed computation model you describe be formalized as a
set of rewrite rules, or is the "black box" model really about a
protocol for message dispatch? Attempts to build distributed messaging
systems haven't been particularly simple. In fact I consider both CORBA
and Web Services to be failures for that reason.

Perhaps it's because the "Message" in OO systems is often forgotten: message passing is described as "calling a method", instead of "sending a message".

Many languages do not reify the message itself as an object.

If send(sel, rcvr, args) can decomposed into apply(lookup(sel, rcvr, args), rcvr, args), then this follows:

  Message.new(sel, rcvr, args).lookup().apply()

Tort does this, so does MOS ( http://kurtstephens.com/pub/mos/current/src/mos/ ), however Ruby, for example, does not -- not sure how many others do.

The Self Language handles apply() by cloning the method object, assigning arguments into its slots, then transferring control to the object's code slot. Yet, there is still no tangible Message object.

It's very difficult to use OO in this way without imposing excessive
knowledge about the internal representation of objects if you need to
serialize parameters or response objects.


Remembering there is an implicit Message object behind the scenes makes message distribution a bottom-up abstraction, starting with identity transforms:


http://kurtstephens.com/pub/abstracting_services_in_ruby/asir.slides/index.html

This doesn't fully remove the serialization issues, but those are readily, and often already, solved. One generic serialization is suitable for the parameters and the message objects; decomposed into Request and Response objects. The Transport is then agnostic of encoding/decoding details.

HTTP seems to have avoided this by using MIME types, but this is more
about agreed upon engineering standards rather than computational
abstractions.


I'm not a fan of HTTP/SOAP bloat. The fundamentals are often bulldozed by it.

Cheers,
Steve


-- Kurt

On Sun, Feb 12, 2012 at 4:02 AM, Jakob Praher <[email protected]
<mailto:[email protected]>> wrote:

    We would have to define what you mean by the term computation.
    Computation is a way to transform a language "syntactically" by
    defined rules.
    The lambda calculus is a fundamental way of performing such
    transformation via reduction rules (the alpha, beta, gamma rules).

    In the end the beta-reduction is term substitution. But abstraction
    and substitution in a generic purpose von Neumann-style computer has
    to be modelled accordingly: A variable in the computer is a memory
    location/a register that can be updated (but it is not a 1:1
    correspondence). E.g. A function in a computer is jump to a certain
    code location having to write to certain locations in
    memory/registers to get the arguments passed.

    IMHO the computational model of objects and method dispatch is more
    of a black box / communcation-oriented model. One does not know much
    about the destination and dispatchs a message interpreting the
    result. In functional languages the model is more white boxed. One
    can always decompose a term into subterms and interpret it.
    Therefore functional languages do not grow easily to distributed
    programming, where the knowledge over the terms is limited.

    Best,
    Jakob



_______________________________________________
fonc mailing list
[email protected]
http://vpri.org/mailman/listinfo/fonc

_______________________________________________
fonc mailing list
[email protected]
http://vpri.org/mailman/listinfo/fonc

Reply via email to