>>11649works in some contexts, fails in others
Really the basic purpose of OOP is to embed the special case manipulations into the data itself (by wrapping it in a class, with uniquely dedicated handlers, when necessary), rather than in the manipulating function. Thus, the meaning of remove_all() can be different for each piece of data, without caring about the particularities of the data (because any peculiarities are handled within the data)
If you don't have (many) special cases, there's no real point creating containers to hide nothing. Which is when procedural languages make a lot more sense.
And then you have functional languages, where you stop calling the program itself a manipulable piece of data, and thus the global state of your machinery becomes constant. In other words, you have a rigid skeleton, embedded with moving parts