> Wouldn’t having functions be first class citizens be locking them in the same cage with data structures as well?
An important difference between first-class functions and objects is that first-class functions are still functions. Closures are also functions, even though they merge data and code together just like objects do. But objects merge data and functions to form something that's neither data nor a function.
This, I think, is a shame. Data and functions are the most important abstractions in computer science. Objects not so much. If you aren't simulating something, then there's no natural ontology that you want to model with objects. By comparison almost every system needs to process data. The data about an object is not itself an object, and it doesn't help matters to conceive of it as an object.
An important difference between first-class functions and objects is that first-class functions are still functions. Closures are also functions, even though they merge data and code together just like objects do. But objects merge data and functions to form something that's neither data nor a function.
This, I think, is a shame. Data and functions are the most important abstractions in computer science. Objects not so much. If you aren't simulating something, then there's no natural ontology that you want to model with objects. By comparison almost every system needs to process data. The data about an object is not itself an object, and it doesn't help matters to conceive of it as an object.