in english auf Deutsch

by Michael Neumann (neumann@s-direktnet.de)

Language Inheritance Templates (*1) Typing Polymorphic Overloading DBC (*3) Compiler/Interpreter Multithreading (*4) Object-Orientation Persistence (*5) GC (*6) Closures Special Feature
BETA single yes static, strong yes no no Compiler yes (Co-Routines) only Pattern no yes no Pattern
C# single (+Interfaces) yes static, strong yes yes no Compiler ? OO no yes (+manual) no every object is a COM-object
C++ multiple yes static, strong yes
(explicit)
yes no Compiler no hybrid (OO/procedural) no no no -
C-Talk multiple yes static, strong yes ? no Compiler yes hybrid (OO/procedural) yes yes yes -
Eiffel multiple yes static, strong yes no yes Compiler no OO no yes no -
Java single (+Interfaces) no static, strong yes yes no Bytecode yes OO no yes no -
Object Pascal single no static, strong yes
(explicit)
no no Compiler no hybrid (OO/procedural) no no no -
Ruby single (+Mixin) (*2) dynamic yes no no Interpreter yes OO no yes yes everything is an object
Sather multiple yes static, strong yes yes yes Compiler no (only pSather) OO no yes yes iterators instead of loop
Smalltalk single no dynamic yes no no Bytecode/Interpreter ? OO no yes ? (yes) everything is an object

(*1) Templates = generic/parameterized classes

(*2) It is possible to create classes dynamically. But Templates do not belong to the language, because it makes no sense (because of the dynamic typing).

(*3) DBC = Design by Contract (Bertrand Meyer); pre-/postconditions and class-invariants

(*4) Multithreading is possible in (almost) any language if additionally libraries are used. Meant is if multithreading standard-wise belongs to the language.

(*5) Persistence is possible in any language (e.g. through files or databases).

(*6) GC = Garbage Collector = automatic memory removal