I have reluctantly come to accept that it is impossible to create a "perfect" programming language. Every language is domain-specific in some sense, and many of the criteria that make a language good for one purpose are fundamentally in opposition to qualities that are good for another.
A classic example would be "scripting" languages versus "embedded" languages.
Good qualities in a scripting language are:
- Dynamic typing (no need to specify types, or cast between them)