You seem to have the idea that a programming language should define a certain set of abstractions and that is that. But to many one of the key powers that programming brings is the ability to define and model new abstractions. In addition to your list I also would therefore also require
Ability to create powerful abstractions within the language, and
Ease of avoiding redundancy/repetition and/or boiler plate code in aid of such abstractions.
You seem to have the idea that a programming language should define a certain set of abstractions and that is that. But to many one of the key powers that programming brings is the ability to define and model new abstractions. In addition to your list I also would therefore also require
Ability to create powerful abstractions within the language, and
Ease of avoiding redundancy/repetition and/or boiler plate code in aid of such abstractions.