Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-13 Thread Kurt Stephens
On 2/13/12 12:58 PM, David Nolen wrote:
 Clojure is another Lisp that puts Objects at the bottom. Depending on
 how its implemented I don't think it needs to be complex - for example
 ClojureScript is hosted on JavaScript (which brings it's own Objects)
 and the ClojureScript compiler is only about 1200 lines of Clojure. And
 it delivers on the good onstage/backstage separation that Kiczales talks
 about. 
Does Clojure, as it's designed, have the choice of not being being
implemented on top of Objects?
For example, has anybody implemented Clojure on Scheme?  Would it be
smaller?

I don't know enough about Clojure.  :(  More things to play with!  :)

 David
Kurt

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread Jakob Praher
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

Am 12.02.12 03:20, schrieb Steve Wart:
 I think of OO as an organization mechanism. It doesn't add
 fundamentally to computation, but it allows complexity to be managed
 more easily.

 On Sat, Feb 11, 2012 at 5:23 PM, Kurt Stephens k...@kurtstephens.com
 mailto:k...@kurtstephens.com wrote:


 COLAs or CLOAs? : are lambda systems fundamentally simpler than
 object systems?

 Should Combined-Object-Lambda-Archtecture really be
 Combined-Lambda-Object-Architecture?

 Ian Piumarta's IDST bootstraps a object-system, then a compiler,
 then a lisp evaluator.  Maru bootstraps a lisp evaluator, then
 crafts an object system, then a compiler.  Maru is much smaller
 and elegant than IDST.

 Are object systems necessarily more complex than lambda
 evaluators?  Or is this just another demonstration of how Lisp
 code/data unification is more powerful?

 If message send and function calls are decomposed into lookup()
 and apply(), the only difference basic OO message-passing and
 function calling is lookup(): the former is late-bound, the latter
 is early bound (in the link-editor, for example.).  Is OO lookup()
 the sole complicating factor?  Is a lambda-oriented compiler
 fundamentally less complex than a OO compiler?

 I took the object-lambda approach in TORT
 (http://github.com/kstephens/tort) tried to keep the OO kernel
 small, and delay the compiler until after the lisp evaluator.  The
 object system started out tiny but to support the lisp evaluator
 created in an OO-style (which the REPL and compiler is built on)
 required a lot of basic foundational object functionality.
  Despite its name, TORT is no longer tiny; I probably didn't
 restrain myself enough; it tries too much to support C extension
 and dynamic linking.

 Did Gregor Kiczales, Ian and others stumble upon the benefits of
 lisp-object bootstrapping .vs. object-lisp bootstrapping?  I've
 written object-oriented LISPs before
 (http://github.com/kstephens/ll based on ideas from OAKLISP).  Do
 OO techniques make language implementation feel easier in the
 beginning, only to complect later on?

  Just some ideas,
  Kurt Stephens

 http://kurtstephens.com/node/154


 ___
 fonc mailing list
 fonc@vpri.org mailto:fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc




 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread Steve Wart
Simplicity, like productivity, is an engineering metric that can only be
measured in the context of a particular application. Most successful
programming languages aren't mathematically pure but some make it easier
than others to use functional idioms (by which I mean some mechanism to
emulate the types of operations you describe below). However many problems
are simpler to solve without such abstractions. That's why practical
languages like Smalltalk-80 and Lisp and their mainstream derivatives have
succeeded over their more pure counterparts.

I think I responded to this message because I was sick in bed yesterday
reading the intro paragraphs of The Algorithmic Beauty of Plants yesterday (
http://algorithmicbotany.org/papers/#abop), and shared the introduction of
DOL-systems with my son. We both enjoyed it, but I'm not sure how this
translates into reasoning about distributed systems.

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.

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.

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

Cheers,
Steve

On Sun, Feb 12, 2012 at 4:02 AM, Jakob Praher j...@hapra.at 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
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread Casey Ransberger
There's always

http://en.wikipedia.org/wiki/Actor_model

and

http://www.dalnefre.com/wp/humus/

...which seem to make concurrency less of a PITA. Like most languages that
crystalize a particular style, though, there's some learning involved for
folks (like me!) who hadn't really thought about the actor model in a deep
way.

On Sun, Feb 12, 2012 at 9:15 AM, Steve Wart st...@wart.ca wrote:

 Simplicity, like productivity, is an engineering metric that can only be
 measured in the context of a particular application. Most successful
 programming languages aren't mathematically pure but some make it easier
 than others to use functional idioms (by which I mean some mechanism to
 emulate the types of operations you describe below). However many problems
 are simpler to solve without such abstractions. That's why practical
 languages like Smalltalk-80 and Lisp and their mainstream derivatives have
 succeeded over their more pure counterparts.

 I think I responded to this message because I was sick in bed yesterday
 reading the intro paragraphs of The Algorithmic Beauty of Plants yesterday (
 http://algorithmicbotany.org/papers/#abop), and shared the introduction
 of DOL-systems with my son. We both enjoyed it, but I'm not sure how this
 translates into reasoning about distributed systems.

 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.

 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.

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

 Cheers,
 Steve


 On Sun, Feb 12, 2012 at 4:02 AM, Jakob Praher j...@hapra.at 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
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc




-- 
Casey Ransberger
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread Kurt Stephens

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 j...@hapra.at
mailto:j...@hapra.at 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
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread Hans-Martin Mosner
Am 12.02.2012 20:01, schrieb Kurt Stephens:
 Many languages do not reify the message itself as an object.

I have been musing lately how the Linda model (tuple spaces) could be helpful.
Tuples can be understood as messages sent to an anonymous receiver (whoever 
does a get with a matching signature).
One nice analogy is that cell biology works pretty similar to that - proteins 
and other molecules are built from
constituents, flot freely (more or less) in the cytoplasm and cause effects 
when they bind to a matching site.
Of course, programming on this level alone seems pretty tedious - I don't know 
how well it scales to higher abstraction
levels. But it does have some nice practical consequences:
- the state of the system is defined by the tuples, so snapshotting and 
in-place software upgrading is relatively painless
- it lends itself well to parallelisation and distribution

Cheers,
Hans-Martin
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread John Zabroski
Hi Kurt,

Lisp is more expressive than lambda alone since Lisp contains forms that cannot 
be represented by lambda directly - an encoding must be used. A novel 
explanation of this math phenomena can be found in Barry Jay's recent book, 
Pattern Calculus, published via Springer-Verlag. But very briefly, pattern 
matching is more general than beta reduction used in the lambda calculus.

I hope this pointer will help you work through your intuition, but the hard 
work is on you since reading Barry's book has some pre-reqs. ;)

Barry does read this list here and there, fyi.



Sent from my Droid Charge on Verizon 4GLTE

--Original Message--
From: Kurt Stephens k...@kurtstephens.com
To: Fundamentals of New Computing fonc@vpri.org
Date: Saturday, February 11, 2012 7:23:01 PM GMT-0600
Subject: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than 
object systems?


COLAs or CLOAs? : are lambda systems fundamentally simpler than object 
systems?

Should Combined-Object-Lambda-Archtecture really be 
Combined-Lambda-Object-Architecture?

Ian Piumarta’s IDST bootstraps a object-system, then a compiler, then a 
lisp evaluator.  Maru bootstraps a lisp evaluator, then crafts an object 
system, then a compiler.  Maru is much smaller and elegant than IDST.

Are object systems necessarily more complex than lambda evaluators?  Or 
is this just another demonstration of how Lisp code/data unification is 
more powerful?

If message send and function calls are decomposed into lookup() and 
apply(), the only difference basic OO message-passing and function 
calling is lookup(): the former is late-bound, the latter is early bound 
(in the link-editor, for example.).  Is OO lookup() the sole 
complicating factor?  Is a lambda-oriented compiler fundamentally less 
complex than a OO compiler?

I took the object-lambda approach in TORT 
(http://github.com/kstephens/tort) tried to keep the OO kernel small, 
and delay the compiler until after the lisp evaluator.  The object 
system started out “tiny” but to support the lisp evaluator created in 
an OO-style (which the REPL and compiler is built on) required a lot of 
basic foundational object functionality.  Despite its name, TORT is no 
longer tiny; I probably didn’t restrain myself enough; it tries too much 
to support C extension and dynamic linking.

Did Gregor Kiczales, Ian and others stumble upon the benefits of 
lisp-object bootstrapping .vs. object-lisp bootstrapping?  I’ve 
written object-oriented LISPs before (http://github.com/kstephens/ll 
based on ideas from OAKLISP).  Do OO techniques make language 
implementation “feel” easier in the beginning, only to complect later on?

   Just some ideas,
   Kurt Stephens

http://kurtstephens.com/node/154


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread Kurt Stephens

On 2/12/12 1:19 PM, Hans-Martin Mosner wrote:

Am 12.02.2012 20:01, schrieb Kurt Stephens:

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


I have been musing lately how the Linda model (tuple spaces) could be helpful.


We've been using tuple spaces at my current job for 5+ years.  It is too 
low-level for distributing object messages.  It feels a little too 
lispy, to boot.  :)  The Linda model is a distribution abstraction 
that doesn't fit very well into a Web SOA, there's too much 
HTTP-centrism now to ignore.


It's *very* likely we will replace it with ASIR framework described in 
my slides.  One could implement a Tuple space (or HTTP) Transport with it.




Cheers,
Hans-Martin


-- Kurt
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread John Zabroski
Applying the Linda analogy to object systems has been done before, perhaps most 
notably by Ehud Shapiro's work on Concurrent Prolog. Ehud once wrote a reply to 
Gertner in the Communications of the ACM, explaining how he could implement 
Tuple-space programs as logic programs. The Dining Philosopher's Problem was 
used as an example.

Even more recently we have things like TeaTime which furthers the tuple-space 
example with infinite backtracking. More broadly, Linda is just another 
implementation of the fully decoupled Observer pattern, where the Subject is 
decoupled from the Observer by a Registry object. TeaTime can then be seen as a 
further generalization to allow for multi-version concurrency control. Other 
systems and/or languages use the Observer pattern as a litnus test for type 
safety or true safe mutable state. Some people describe the problem in very 
weak languages as Callback Hell, because an unsafe non decoupled Ovserver 
pattern implementation doesn't have a fairness strategy or way to prioritize 
Observers out of the box. For example, should the first object to get a 
notification from the subject be the first to reply? What about race conditions 
and dirty reads due to the first ovserver causing a second change notification 
from the Subject?

It turns out these strategies like fairness and message prioritization can be 
built from a trustworthy core - as shown in the E language and first 
hypothesized by Hewitt in his Actor Model. In the Actor Model an actor can 
reorder messages and thus decide priority, even providing fairness which the 
Actor Model axioms say nothing about. In E, communication is handled by 'vats' 
which are essentially a different way to implement a Registry object to fully 
decouple the Subject and Observer and still provide fair resource allocation. 
Yet, E lacks static well-defined types for reasoning about behavior. So type 
theorists come along and ask if they can make a type safe Observable behavior 
that addresses these concerns - see Scala for example.

Hope this perspective on history helps.

Cheers, 
Z-Bo

Sent from my Droid Charge on Verizon 4GLTE

--Original Message--
From: Hans-Martin Mosner h...@heeg.de
To: Fundamentals of New Computing fonc@vpri.org
Date: Sunday, February 12, 2012 8:19:37 PM GMT+0100
Subject: Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler 
than object systems?

Am 12.02.2012 20:01, schrieb Kurt Stephens:
 Many languages do not reify the message itself as an object.

I have been musing lately how the Linda model (tuple spaces) could be helpful.
Tuples can be understood as messages sent to an anonymous receiver (whoever 
does a get with a matching signature).
One nice analogy is that cell biology works pretty similar to that - proteins 
and other molecules are built from
constituents, flot freely (more or less) in the cytoplasm and cause effects 
when they bind to a matching site.
Of course, programming on this level alone seems pretty tedious - I don't know 
how well it scales to higher abstraction
levels. But it does have some nice practical consequences:
- the state of the system is defined by the tuples, so snapshotting and 
in-place software upgrading is relatively painless
- it lends itself well to parallelisation and distribution

Cheers,
Hans-Martin
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread Julian Leviston

On 13/02/2012, at 6:01 AM, Kurt Stephens wrote:

 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.
 

I don't follow why a message isn't simply a token. For example, in Ruby, a 
message is simply a symbol, is it not? One has to draw the line in the sand at 
some point. Why bother building an entire object for something which simply 
holds reference to a Method name (or not, as the case may be)? In this case, 
the media *is* the message, is it not? ;-) or are you stipulating that a 
Message would know how to perform lookup and call, and therefore warrants an 
entire class... the only issue here is that  of efficiency, isn't it?

Sorry if I'm asking really obviously answerable questions. Please bear with me. 
I'm eager to learn.

Another question I have, is, how do you solve the obvious recursive quality of 
having Message.new(sel, scr, args) and also then sending messages to the 
message object? Is new the bottom-out point?


 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.

How about REST?

 
 Cheers,
 Steve
 
 
 -- Kurt

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread Kurt Stephens

On 2/12/12 4:11 PM, Julian Leviston wrote:

On 13/02/2012, at 6:01 AM, Kurt Stephens wrote:

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()

...


I don't follow why a message isn't simply a token.

 For example, in Ruby, a message is simply a symbol, is it not?

You are confusing the name of a method (its selector), used to locate 
the method, for the message.  The message contains the selector, 
receiver, arguments, and in the case of Ruby, an optional block -- 
everything need to pass data and transfer control.  The selector 
represents many methods -- the actual behavior is in the method.  In 
some object systems (TORT) selectors and methods can be anonymous.


 One has to draw the line in the sand at some point.
 Why bother building an entire object for something which simply holds 
reference to a Method name

 (or not, as the case may be)?
 In this case, the media *is* the message, is it not? ;-) or are
 you stipulating that a Message would know how to perform lookup and 
call,
 and therefore warrants an entire class... the only issue here is that 
 of efficiency, isn't it?


Why draw a line at all?  The elements of the message are already there, 
at least in CRuby, but are buried in the C stack -- not visible to the 
user in an organized manner.  TORT allocates Message objects on the C 
stack, however a Message object does not need to exist until it's 
referenced.


In TORT, the receiver's method table implements lookup(msg) and the 
located method implements apply(msg, rcvr, args...); in fact, all 
objects in TORT implement apply(), most of them raise an error when 
apply() is called (similar to Self's code slot).  The message object, 
not the receiver, is always the first implicit argument.


I could imagine Message implementing both lookup() and apply(), but it 
could be delegated to any other object(s), or replacing the default 
object responsible for send() with another that prints traces then 
delegates to some other object.


Message.apply() could act like invoking a continuation.  You could take 
a Message, install it as a method somewhere and restart it.



Sorry if I'm asking really obviously answerable questions. Please bear with me. 
I'm eager to learn.

Another question I have, is, how do you solve the obvious recursive quality of 
having
 Message.new(sel, scr, args) and also then sending messages to the 
message object?

 Is new the bottom-out point?




Read Ian Piumarta's Open, extensible object models ( 
http://piumarta.com/software/cola/objmodel2.pdf ).
At a certain level, send(), lookup() and apply() have bootstrap 
implementations to break the infinite regress.  TORT was directly 
inspired by Ian's paper.  MOS (written a while ago) has a very similar 
object model and short-circuit.  There is an object, well-known by the 
system, that describes its self -- this is where the short-circuit lives.


A graph of TORT's object model is here: 
http://kurtstephens.com/pub/tort/tort.svg .  It's turtles all the way 
down, er... um... to the right.  The last turtle, the method table, is 
chewing its tail. :)



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


How about REST?


REST is not object messaging or HTTP.

-- Kurt

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] COLAs or CLOAs? : are lambda systems fundamentally simpler than object systems?

2012-02-12 Thread Julian Leviston
Hiya,

On 13/02/2012, at 2:47 PM, Kurt Stephens wrote:

 Read Ian Piumarta's Open, extensible object models ( 
 http://piumarta.com/software/cola/objmodel2.pdf ).
 At a certain level, send(), lookup() and apply() have bootstrap 
 implementations to break the infinite regress.  TORT was directly inspired by 
 Ian's paper.  MOS (written a while ago) has a very similar object model and 
 short-circuit.  There is an object, well-known by the system, that describes 
 its self -- this is where the short-circuit lives.
 

Yeah I've read it about 20 times. I found it quite difficult... (mostly because 
of the fact that I didn't understand some of the C idioms, but also because the 
architecture was difficult to comprehend for me in general). Ian's object model 
didn't actually reify message though, did it? I should go read it more. I wish 
that it was more accessible to me, and/or that I could somehow increase my 
ability to comprehend it. Any further recommendations for things to read along 
this lines? I'm QUITE interested (this was my favourite part of the FoNC 
project to a point).

 A graph of TORT's object model is here: 
 http://kurtstephens.com/pub/tort/tort.svg .  It's turtles all the way down, 
 er... um... to the right.  The last turtle, the method table, is chewing 
 its tail. :)
 
 I'm not a fan of HTTP/SOAP bloat.  The fundamentals are often bulldozed by 
 it.
 
 How about REST?
 
 REST is not object messaging or HTTP.
 

REST works over HTTP. It can be object messaging, can't it? At least, as far as 
my understanding and implementations have gone. Maybe I'm deluded.


 -- Kurt
 
 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc