- Type inference - Function overloading (types and arity) - Operator overloading - Generic types - References for all values and functions to use instead of pointers - Lexical scoping and easy let block syntax - Lambda-expressions returning a reference to a function - A native dynamic type of string based on dynamic allocation and length-based (not null-terminated) - A standard library and value syntax for cons cells, linked lists, dynamically allocated lists, sets and dictionaries - Exceptions, try/catch/finally blocks but no throw Exception Java bullshit on function definitions - A standard iterator protocol and foreach - Generators - Coroutines - A module system - An all-new standard types and library that is truly platform-independent and requires no configuration; int is abolished and types without explicit, clear size are abolished - A standard library with full Unicode semantics and batteries-included modules for JSON, all UNIX semantics and everything else - while, do, for, if, switch, functions, etc. return the last evalusted value and everything becomes an expression - Function version of all operators - A standard library of FP tools - Optional official GC - Optional bounds checking - An improved macro system with better multiline support and gensym - Perhaps 2 phase compile-time macros that receive AST and can take one or more language constructs after name (e.g. a word, or anything inside parens, brackets or braces) - Reader macros - Very good libraries to work with ASTs, and very effective, low-complexity ASTs - A standard read-compile-dynamic-link-run console - Compiling flags standardized and can be specified within the source files