I'd like to explore specific esoteric programming language features, so I wouldn't mind if the next language I learn has some of them. Specific things I consider a plus:
Javascript | Lua | Perl 5 | Perl 6 | PHP | Python | Ruby | Java | JVM | C# | CLR | Scheme | Haskell | OCaml | Clojure | Scala | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
I'm leaning towards (out of 5) | 5 | 4 | 5 | 4 | 3 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
threshold for consideration | ** | ** | ** | ** | ** ** | ** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Other bits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dynamic or static typing? | D | D | D | D | D | D | D | S | - | S | - | D | S | S | D | S | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
purely functional language | N | N | N | N | N | N | N | N | - | N | - | Y | Y | N, N | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
code-as-data, e.g. Lisp-like syntax | N | N | N | N | N | N | N | - | N | - | Y | N | N | Y | N | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
lazy evaluation | Y | sorta | N? | N? | Y | Y | Y? | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Functional programming bits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
closures | Y | Y | Y | Y | v5.3 | Y | Y | not yet | WkAr | Y | Y | Y | Y | Y | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
serializable closures | module | Y | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lisp-style macros | Y | N | Y | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
other metaprogramming | patch | barely sorta | Y | sorta | - | N | - | Y, Y | WkAr | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
first-class functions | Y | Y | N | Y | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
anonymous functions | Y | sorta | N | Y | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
higher-order functions | Y | Y | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
formally recognizes pure functions | N? | N | v4.0? | Y | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tail call optimization | N | Y | N | N | N | Y | N | N | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Coroutines/generators/continuations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
first-class continuations | N | N | N | Y | patch | v1.9 | N | N | Y | Y | patch | N | v2.8 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
coroutines (send) (controllable fibers) | N | Y | N | Y | Y, more | v1.9 | N | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
generators (receive) | v1.7 | Y | v2.5 | Y | N | Y | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Multithreading | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
usable threads? | N | Y | Y | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
true concurrency | N | Y | Y | Y |
- | not applicable |
WkAr | a (possibly imperfect) workaround exists |
a VM (that could support many different languages), not just one specific language |