Sheet1
|
|
|
Compilation-only languages |
|
|
Shell Scripts |
|
Exotic languages |
Functional Languages |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
C++ |
Java |
Ada |
|
Unix sh |
Perl |
Python |
Ruby |
|
O'Caml |
Haskell |
Pure LISP |
Common LISP |
|
|
Scheme |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
librep |
|
GNU CLISP |
E-Lisp |
Xemacs LISP |
|
Guile |
MzScheme |
User Interface |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
REPL |
|
No |
|
|
|
|
Yes |
|
|
Yes |
No |
|
Yes |
Hugs |
Yes |
No |
|
|
|
|
|
|
|
|
|
Customizable |
|
|
|
|
|
|
No |
No |
U |
|
|
Yes |
Yes |
No |
|
|
Yes |
No |
No |
|
Yes |
Yes |
|
|
Available as a library |
|
|
|
|
|
|
No |
Yes |
Yes |
|
|
No |
No |
No |
|
|
No |
No |
No |
|
Yes |
Yes |
|
GUI |
|
|
IDE |
IDE |
IDE |
IDE |
No |
|
|
Libraries |
Libraries |
|
|
|
No |
|
|
|
Emacs |
Xemacs |
|
|
MrEd, DrScheme |
|
|
REPL-in-GUI |
No |
|
|
|
|
|
|
|
U |
No |
|
No |
No |
|
No |
|
No |
Yes |
Yes |
|
No |
Yes |
|
|
Toolkit available in the language |
|
Libraries |
Libraries |
Native |
Libraries |
|
No |
Libraries |
Libraries |
Libraries |
|
Yes |
Yes/U |
|
Libraries |
|
Libraries |
No |
Yes |
|
Libraries |
Yes |
|
|
Customizable in the language (e.g. on-the-fly new widgets for new datatypes) |
|
Libraries |
Libraries |
Libraries |
Libraries |
|
No |
Libraries |
Libraries |
Libraries |
|
Libraries |
U |
|
U |
|
Libraries |
No |
Yes/U |
|
Libraries |
Yes |
Language Features |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Typing |
|
Yes |
|
|
|
|
Yes(5) |
No(6) |
Yes |
Yes |
Yes |
|
Yes |
Yes |
No |
No/U |
Yes |
|
|
|
Yes |
|
|
|
|
Extensible |
|
Yes |
Yes |
Yes |
Yes |
|
|
Yes |
Yes |
Yes |
|
Yes |
Yes |
|
U |
Yes |
|
|
|
Yes |
|
|
|
|
Extensible with foreign types |
|
Common headers |
Common headers |
Dynamically |
Abstract types |
|
|
U |
Yes |
Yes |
|
Abstract types |
Abstract types and monads |
|
U |
|
Yes |
No/U |
Yes |
|
Yes |
Yes |
|
|
Dynamic |
No |
|
|
|
|
|
|
Yes |
Yes |
No |
|
Yes |
Yes |
|
U |
Yes |
|
|
|
Yes |
|
|
|
|
Late (types at eval time) |
|
|
(1) |
(1) |
|
|
|
Yes |
No |
No |
|
No |
No |
|
U |
Yes |
|
|
|
Yes |
|
|
|
|
Higher-order functions |
|
Yes(11) |
Yes(11,13) |
No |
Yes(11) |
No |
|
(12) |
Yes |
Yes |
Yes |
|
|
|
|
|
|
|
|
|
|
|
|
OOP |
|
|
No(4) |
Yes |
Yes |
Packages |
|
No |
|
|
|
|
Yes |
No |
No |
|
CLOS |
|
No |
No |
|
GOOPS (CLOS) |
Java (22) |
|
|
Classes and objects, methods |
|
|
Yes |
Yes |
Yes |
|
|
Yes(7) |
Yes |
Yes |
|
Yes |
|
|
|
|
|
|
|
|
|
|
|
|
Generic functions |
|
|
Yes |
No |
Yes |
|
|
No |
U |
No |
|
No |
|
|
|
|
|
|
|
|
|
|
|
|
Multimethods |
|
|
Yes(2) |
No |
U |
|
|
No |
No |
No |
|
No |
|
|
|
|
|
|
|
|
|
|
|
|
MOP |
|
|
No |
Yes(20) |
No |
|
|
No |
No |
No |
|
No |
|
|
|
|
|
|
|
|
|
No |
|
Libraries |
|
Yes |
|
|
|
|
|
No |
Yes |
|
|
|
Yes |
Yes |
No |
|
|
|
|
|
|
|
|
|
|
Standard Utilites |
|
Rich |
Complete |
Complete |
Complete |
|
|
Complete |
Rich |
Rich |
|
Rich |
Rich |
|
|
Complete |
|
|
|
Complete |
|
|
|
|
Namespaces |
|
No |
Yes |
No |
U |
|
|
U |
Yes |
U |
|
No |
No |
|
|
No |
|
|
|
|
Yes |
Yes |
|
|
Modules |
|
No |
No(3) |
Packages |
Yes |
|
|
Yes |
Yes |
U |
|
Yes |
Yes |
|
|
Yes |
|
|
|
Yes |
|
|
|
Extensibility |
|
Yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dynamic modules |
|
dlopen |
dlopen |
Classes are dynamic |
dlopen/U |
|
No |
Yes |
Yes |
Yes |
|
Yes |
U |
No |
Yes |
|
Yes |
Yes |
Yes |
|
Yes |
Yes |
|
|
Dynamic foreign modules |
|
dlopen |
dlopen |
JNI |
dlopen/U |
|
No |
Yes |
Yes |
Yes |
|
Yes(16) |
U |
No |
Yes/U |
|
No |
No |
Yes |
|
Yes |
Yes |
|
|
FFI |
|
Yes |
Yes |
JNI |
Yes |
|
Yes(8) |
No |
Yes |
Yes |
|
Yes(17) |
Yes/U |
No |
Yes/U |
|
Yes(23) |
No |
No |
|
No |
Yes(23) |
|
|
Evaluator available as a library |
No |
|
|
|
|
|
No |
Yes |
Yes |
U |
|
No |
No |
No |
Yes |
|
No |
No |
No |
|
Yes |
Yes |
|
Compilation |
|
Yes |
|
|
|
|
|
No |
|
Yes |
Yes |
|
Yes |
Yes |
No |
|
|
|
|
|
|
No |
|
|
|
To Bytecode |
|
No |
No |
Yes |
No |
|
|
Yes |
Yes |
U |
|
Yes |
Yes/U |
|
|
|
Yes |
Yes |
Yes |
|
|
Yes |
|
|
To Native code |
|
Yes |
Yes |
Yes(9) |
Yes |
|
|
No |
No |
U |
|
Yes |
Yes |
|
|
|
U |
No |
No |
|
|
Yes |
|
|
Special optimizations when compiling |
|
Yes |
Yes |
Yes |
Yes |
|
|
U |
U |
U |
|
Yes |
Yes |
|
|
|
U |
Yes |
Yes |
|
|
Yes |
|
|
Compilation time |
|
Low |
Huge |
High |
High |
|
|
Low |
Low |
Low |
|
Low |
Medium |
|
|
|
Low |
Low |
Low |
|
|
Low |
|
|
Separate Compilation |
|
Yes |
Yes(21) |
Yes |
Package-level |
|
|
Yes |
U |
U |
|
Yes |
Yes |
|
|
|
Yes |
Yes |
Yes |
|
|
Yes |
|
|
Compiled code run-time performace |
High |
|
|
|
|
|
|
Good |
U |
U |
|
High |
Good |
|
|
|
Good |
Good |
Good |
|
|
High |
Extra Features |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Anonymous functions |
|
No |
Yes(14) |
No |
No |
|
No |
No |
Yes |
Yes/U |
Yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
Closures |
|
No |
No |
No |
No |
|
No |
Yes(15) |
U |
Yes/U |
Yes |
|
|
(18) |
(18) |
(18) |
(18) |
(18) |
(18) |
|
|
|
|
|
Reflection |
|
No |
No |
Yes |
No |
|
No |
U |
No |
No |
|
No |
No |
Yes |
|
|
|
|
|
|
|
|
|
|
Standard operator and function overloading |
|
No |
Yes |
No |
Yes(25) |
|
Command aliases |
No |
Yes(24) |
Yes |
|
No |
Yes |
Yes |
|
|
|
|
|
|
|
|
|
|
Dynamic scoping |
|
No |
No |
No |
No |
|
Yes |
Yes |
No |
No |
|
No |
No |
Yes |
|
|
|
|
|
No |
|
|
|
|
Continuations |
|
No(19) |
No |
No |
No |
|
No |
No |
No |
U |
|
No |
No/U |
No |
|
|
|
|
|
Yes |
|
|
|
|
Exceptions |
|
No |
Yes |
Yes |
Yes |
|
No |
No |
Yes(24) |
Yes |
|
Yes |
No |
No |
|
Yes |
|
|
|
Yes |
|
|
Popularity Factor |
|
Good |
Max |
Max |
Good |
Low |
High |
Max |
Max |
Good |
Low |
High |
Good |
Low |
Max |
Low |
Max |
High |
Max |
Max |
High |
Low |
High |
Seriousness Factor |
|
High |
Max |
Max |
High |
Max |
Low |
Low |
Good |
Max |
U |
Max |
High |
High |
Max |
High |
Max |
High |
High |
High |
High |
High |
High |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(1) - Type anonymisers can be "emulated" with RTTI |
(9) - Not universally supported |
|
|
(17) - Wrappers needed |
|
|
(24) - Yes for operators, but no general overloading |
|
|
|
|
|
|
|
|
|
(2) - Through the Visitor design pattern |
|
(11) - function pointers |
|
|
|
(18) - Non-hygienic |
|
|
(25) - except the assignment operator |
|
|
|
|
|
|
|
|
|
|
(3) - Can be emulated with design conventions |
(12) - can be emulated |
|
|
|
(19) - Can be emulated with setjmp/longjmp |
|
|
|
|
|
|
|
|
|
|
|
|
|
(4) - Can be emulated with design conventions |
(13) - With function objects |
|
|
(20) - When using reflection only |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(5) - Most of the time |
|
(14) - With static genericity and function objects |
|
(21) - Unless using genericity |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(6) - only character strings are supported |
|
(15) - Rarely used feature |
|
|
|
(22) - CLOS-like functionality with Meroon |
|
|
|
|
|
|
|
|
|
|
|
|
|
(8) - command invocation |
|
(16) - Recent, unstable |
|
|
|
(23) - Non-standard |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|