"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]