"Pixel" <pixel / mandrakesoft.com> wrote in message
news:lypu677vap.fsf / leia.mandrakesoft.com...
> "David Simmons" <david.simmons / smallscript.net> writes:
>
> > As previously posted, you inspired me blatantly build on your idea and
write
> > a similar chart for our website.
> >
> > See http://www.smallscript.org/Language%20Comparison%20Chart.asp
>
> some remarks:
> - what do you mean with "multi-methods". AFAIK it's multiple dispatch, aka
> using runtime type of arguments for dispatching. Few languages have this,
C++
> doesn't nor C# (CLOS, dylan do have it).

Overloading is the static-binding (language) name. Multi-methods is the
dynamic-binding (language) name. Some authors prefer to write it as
"multimethods" e.g., Art of the Metaobject Protocol and various other
excellent lisp references.

Given that multi-methods are the dynamic-language name, only those languages
which are "dynamic" would be on the short list of multi-method
implementators [i.e., the lisp family of languages and those languages built
on top of lisp facilities; and SmallScript built on a general dynamic
language execution architecture].

However, be they statically or dynamically bound, the principle of the
facility is the same: in statically typed and analyzed/compiled languages
the binding (based on argument types) takes place at compile-time; in
dynamically typed languages the binding (based on argument types) takes
place at runtime. That principle being the use of all the argument types as
predicates in the binding process, rather than just using the
method/function name (and possibly the receiver's type).

This requires significantly more precise explanation to present the issues
properly for languages that have static typing and limited dynamic typing
facilities [which leads to type-case expressions that are runtime checked
rather than using modern-adaptive-dynamic binding-techniques developed in
the mid-80's].

This is "closely" related to my comments on C++ lacking "Calltime Dispatch
Binding". I.e., C++ has static-overloading but lacks
calltime-dispatch-binding facilities to be able to provide runtime/calltime
overloading. If it had such facilities then it could, at runtime, truly
dispatch on one or more parameters to a function (including <this> as a
parameter).

> - "Calltime Dispatch Binding": not in C++? weird

Strictly speaking, vtable dispatch is not a binding process at all. It is
just a vectored indirection that is invariant with respect to methods being
added, removed, calling context restrictions etc. Whereas a calltime
dispatch binding facility actually performs the binding at call-time based
on various runtime alterable characteristics.

> - what do you mean with "Tail Calling"? IMO it's an optimisation which
depend on
> the implementation. AFAIK many C++ implementations handle tail recursion
(gcc
> does it nicely since 2.96)

I did not know gcc had this; I've never tried it. However it is not part of
the C++ standard. By that measure. there are many different C++ extensions
that exist (incompatibly) across implementations for providing very useful
features.

w.r.t. tail-calls, (if you say that gcc implementation supports
tail-recursion calls, I certainly am interested in verifying that because I
could use it for some VM build work). However, I'm not really sure I see how
it (c++) could be doing this for anything other than calls to the current
method/function. Which is not general tail-recursion calling [otherwise one
could loosely claim that any language with a goto had tail-calling].

> - "templates" is the specific C++ terminology. generics is a more common
term
> for this

This item was provided by the original chart producer (Armin Roehrl -
http://www.approximity.com/ruby/Comparison_rb_st_m_java.html). I didn't
change it. However the C++ standard refers to them as templates [which we
all know fall under the general category of generic programming -- which
itself falls under the category of a macro system (in the true lisp/scheme
sense)].

P.S., the updated table is now maintained at:

    http://www.smallscript.org/Language%20Comparison%20Chart.asp

-- Dave S. [www.smallscript.org]