Requirements |
Desirable |
|||||||||
Language |
Embeddable |
Threaded |
Sandbox |
Portable |
Garbage Collected |
Object Oriented |
Typed |
Parameterized Types |
Speed |
Syntax |
Perl |
Poor |
Not much |
?? |
Probably |
No, ref counts |
Some |
No |
No |
Poor |
Complicated |
Python |
Moderate |
NO |
?? |
Probably |
No, ref counts |
Fine |
No |
No |
Poor |
Good |
Guile |
Good |
In flux |
?? |
Unix only? |
Yes* |
Not done |
No |
No |
Poor |
Wrong |
Eiffel |
Probably |
Sytem threads |
?? |
Except Mac Dev |
Yes |
Yes Everything is an Object |
Yes* |
Yes |
Compilable |
Fine |
Lua |
Good |
Yes |
?? |
Yes |
Yes |
Fine* |
No |
No |
Poor |
Good |
Java |
Probably |
Yes |
Yes |
Probably |
Yes |
Yes |
Yes |
No |
Good |
Good |
GJ |
Probably |
Yes |
Yes |
Probably |
Yes |
Yes |
Yes |
Yes* |
Good |
Good |
JOOS |
Yes |
Yes |
Yes |
Yes |
Yes* |
Yes |
Yes |
Yes** |
Poor |
Great |
Perl: http://www.perl.com/
Python: http://www.python.org/
Guile: http://www.gnu.ai.mit.edu/software/guile/guile.html. Right now Guile is poorly documented. *Guile’s garbage collection is currently a choice between a slow mark and sweep algorithm and an experimental generational algorithm. There are architectural complications preventing some of the cool ideas to be used in JOOS (specifically that JOOS objects have addresses which monotonically increase with age, making generational write-barriers easy). Also Guile’s gc may be overly conservative when determining root nodes.
Eiffel: http://www.eiffel.com/. *Eiffel is statically typed but not completely sound, so this may be a source of unsafety. Licensing issues!
Lua: http://www.tecgraf.puc-rio.br/lua/ *Lua is an object based language, it has no classes. Inheritance is a constructed concept, implemented using the language’s ‘fallback’ mechanism. Either single or multiple inheritance can be supported. Operator overloading may (as in: you have a choice in the matter) also be supported.
Java: http://java.sun.com/. There may be licensing issues.
GJ = Generic Java: http://www.cs.bell-labs.com/~wadler/gj/, more experimental than Java, but compiles to either Java or Java bytecode, *Using erasures, does not support non-object types
JOOS: Josh’s Object Oriented Scripting language (pronounced juice) Being specified, not yet in development. * Also supports more direct control over object lifetime (such as reference counts), on a per object basis. Object model specifically makes a generational garbage collector easier to implement. **Using erasures, like GJ. ***Also will good support for: localization/internationalization, resources, mode switching, reflection, integration, funky instruction set with arbitrary length commands (IsInSet {2,3,5,...,17}, Map { 1->a, 3->d, ... 113->q }), object oriented virtual machine.