Print

Print


   Date:         Tue, 2 Mar 2004 21:29:21 -0800
   From: [log in to unmask]

   ...
   So, if you had a function-like syntax to reference components, ...

I have no idea what the OO extensions in F2003 are going to look like,
apologies in advance, but I'm guessing they are similar to the message
sending model of C++ and Java:
    C++:   objectRef.methodName(args...)
        or objectPtr->methodName(args...)
    java:  object.methodName(args)
This is certainly the simplest, as it allows the object to have a
"virtual function table" and the appropriate implementation of the
method is extracted from the table.  Lisp Machine Lisp started out
this way
        (send object ':messageName ...args...)
but CommonLisp bit the bullet (mid '80s, don't know how far back the
ideas date) and turned things back into functions.  Generic functions.
With polymorphic dispatch:
        (draw graphic device)
where the draw method is selected based on the runtime types of BOTH
the graphic and the device.  Note that C++/Java overloading only
selects methods based on the *compile-time* type of the arguments, so
generic functions are different.

(Yes, they are generally a bit slower because the virtual function
table lives in the method's datastructure, not an object's, plus the
runtime time to determine the multi-method.  C++'s semantics allow
message sending to be a compile-time index into the virtual function
table; quite fast.  Java's semantics require runtime lookup; hashing
and caching speed this up.  As I recall from the Symbolics
implementation, there are ways to design cascading hash-like tables to
make it "sufficiently" fast.)

So... in addition to function-like syntax to reference components, use
function-like syntax to invoke OO methods.  The same abstraction
arguments apply.