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.