I agree that every language has its trade-offs, but you can move lots of stuff into the standard library of the language.
Taken to the extreme, the result can be an extremely small language. If your language is expressive enough, the result can also look like it is a much larger language. For example, Forths implement if/else, for/do, while/do, repeat/until, switch/case in terms of some stack manipulation and ‘jump’. Similarly, Common Lisp builds its control structures, object oriented programming support, etc, out of a few primitives.
Taken to the extreme, the result can be an extremely small language. If your language is expressive enough, the result can also look like it is a much larger language. For example, Forths implement if/else, for/do, while/do, repeat/until, switch/case in terms of some stack manipulation and ‘jump’. Similarly, Common Lisp builds its control structures, object oriented programming support, etc, out of a few primitives.