1) Garbage collection
2) Dynamic typing
3) No distinction between primitive values and general values - a value can be used everywhere
4) Lexical closures and higher-order functions
5) A hygienic macro system
6) First-class continuations
7) Space safety guarantees for tail calls ('tail call optimization')
8) A numeric tower
9) S-expression syntax
10) A focus on cons cells and lists as primitive data structures
There's probably something I'm missing, but the only feature that Java shares is the first.
1) Garbage collection
2) Dynamic typing
3) No distinction between primitive values and general values - a value can be used everywhere
4) Lexical closures and higher-order functions
5) A hygienic macro system
6) First-class continuations
7) Space safety guarantees for tail calls ('tail call optimization')
8) A numeric tower
9) S-expression syntax
10) A focus on cons cells and lists as primitive data structures
There's probably something I'm missing, but the only feature that Java shares is the first.