I've been working on a new programming language and I've started to think that the design of a language's standard library (in terms of error handling, consistent naming, consistent argument ordering, types, etc) has a greater impact on the learning curve and ergonomics of a language than the more commonly discussed syntax differences and unique features.<p>For example, I can _never_ remember if a function in JS or Python mutates a list/object or returns a new copy. Without editor hints this was an annoyance, as I'd have to try it out, check the source, or search the docs. Such issues never happen with a functional standard library (as in Clojure) where you can always assume immutability.<p>Meanwhile in Clojure, if I've been gone from the language for a while I forget which list functions return a lazy sequence, a seq, or a vector, and I find myself making frustrating errors as a result. Or how some functions (like map and filter) take the collection as the last argument, and a few others take it as the first.<p>It seems like a poor standard library design requires acquiring much more 'trivia' about the language to be successful, to write performant code, and (sadly) to pass many technical interviews.<p>What do you think makes a good standard library? A bad one? Do you have any favorite features you'd like to see more of?