There's been an explosion of new programming languages being released in the last decade. Many of them are built on top of Java, .NET, or LLVM. Most of them don't gain much traction.
There are a few reasons for this:
Syntax Taste: People like different flavours of syntax.
Language Features: It's rare for any language to have all of the most popular features -- OOP, garbage collection, closures, functional paradigms, mixins, dynamic/static typing, etc.
Libraries: The Standard Library wheel must be reinvented (or re-wrapped) every time a new language is created. New bindings to existing libraries must be created. Entirely new native libraries must be created. The creation of all of these depend on the language being popular for specific uses. This causes every language to have a different set of libraries of varying quality and maturity. Which language you pick to solve a problem often depends on who has used it to solve that problem before, not its fitness for solving that problem.
So, how do we solve this problem?
First, what we need to do is separate the information contents of the programs from their presentation by making the language's syntax user-definable.
Then, we need to make the programming system dynamically extensible, so that the language features (or semantics) can be added to the core without having to totally rewrite the system.
Once these two criteria are met, it should grow organically. Eventually it will have many useful libraries and syntax-bindings. Perhaps even perspectives!
This seems to be the direction that vpri's S.T.E.P.S. is going. Kudos to them.
