|
|
|
|
|
by bitwize
3835 days ago
|
|
Well yeah, but that's not really how complex systems are developed anymore. Modern software development uses the object as the modular unit of granularity, not the process -- and APIs, perhaps augmented with message queues, for communication rather than pipes, sockets, and file descriptors. This is because it's much easier to statically reason about objects with well-defined APIs and they can be composed more flexibly with appropriate fabric: interacting locally or across process, user, or system boundaries. This model dates back at least as far as Smalltalk but what really caused it to take off was -- wait for it -- Windows COM. So modern development has moved on from the Unix philosophy and embraced the Windows philosophy. |
|
I'm not sure what you mean about objects being composed across system or process boundaries. Name a successful system where that's true. Who uses DCOM? Distributed objects failed. I occasionally see people trying to bring back this way of thinking (e.g. they want methods instead of RPCs and protobufs), but they have not succeeded, for fundamental reasons.
In reality it's not either-or. You need both ways of thinking. Objects are static (they exist as an agreement between the compiler and programmer, and are usually thrown away at runtime); processes are dynamic. Many programmers that think only in terms of objects learn the hard way that their programs are brittle and inefficient. System operators think in terms of processes, and this way of thinking is essential for resilient systems.
In addition, objects are losing importance in distributed systems because state in a single machine's memory is not very useful. In real distributed systems you need replicated/resilient state with varying consistency guarantees. An object doesn't help you with any of those things.