-
Generally agree with this take, much easier to fix userland mistakes than platform mistakes. However it is also important to consider the primitives defined by the platform and their impact on the ecosystem. Foundational primitives are still the platform's responsibility. @mhevery/1554221786274754560
-
A good example of this is
Option<T>
andResult<T, E>
. These are trivially implementable in userland, but are rarely used like so. Why? Because the ecosystem can't rely on such primitives to be present and doesn't want to force a dependency or have a non-standard API contract. -
This is most visible by contrasting #JavaScript (which doesn't have either) and #Rust (which does). The former uses
null
/undefined
and exceptions everywhere because that's what the language provides. The latter commonly useOption
andResult
*because* they're standard. -
So while platforms generally shouldn't grow beyond the minimal API surface to meet their needs, they *also* need to think of the primitives they are defining for the ecosystem to build on top of. If you can't build upon it, it isn't a very good platform is it?