- Consistent (orthogonal feature set)
- Small (core language features and API)
- Safe (encouraging quality code)
- Familiar (for newcomers)
- Easy reading for people (for newcomers and experts)
- Easy reading for computers (toolable, optimizable)
I think some of these tend to work against each other, and some support each other.
Looking at present times, small core APIs (microkernel-ish) sure aren't in vogue. Rather people tend towards "batteries included". Note that a small core should make cross-platform easier to do.
I also wonder if the current trend towards optimizing and tooling dynamic languages will eventually overcome static languages. I think it will be a while yet, but things seem to be moving that direction.