202107292108 Simple primitives don't guarantee simple constructs
Using simple primitives to build a system doesn't guarantee that the end system will be simple. Simple primitives can purposely introduce complexity by being composed to express complex ideas. 202104291540 Emergence can also contribute to the complexity through unknown interactions #thread, 202110231515 Feedback loops and 202110231516 Feedforward loops, and chaos #thread.
Consider the axioms of mathematics. All of mathematics and a huge portion of other applied sciences is built on top of a few simple rules. There's seemingly no limit to the expressivity of those rules.
Corollary
Using complex primitives to build a system does not guarantee that the resulting system will be complex.
Consider the real numbers. A nuanced system with infinities and apparent paradoxes provides us with a way to intuitively express the real world around us. It gives us calculus and other methods that have been effective at building the modern world.
How does this relate to programming system design and the primitives we choose for libraries? There seems to be a bottleneck in efficiency for low level (complex?) primitives that can build complex systems, but a lower ceiling of high level primitives. You're blocked from being fast with low-level, but blocked from even expressing certain things in high-level. #thread