4 ms·
C++, Java, Go, Ada, Erlang. These are all designed explicitly for programming-in-the-large. I think the reason you still see classes and modules as the top-le
by nostrademons 4y ago
C++, Java, Go, Ada, Erlang. These are all designed explicitly for programming-in-the-large.
I think the reason you still see classes and modules as the top-level abstraction in programming-in-the-large languages is because people have found that having hierarchically composable uniform abstractions is a more effective approach for large-scale system design than creating specialized concepts for system, subsystem, component, etc. An interface in Java might be a first-class function, or it might be the entry point to a distributed system running on 10,000 machines with 15 million lines of code. But the key point is that by representing that as an interface, all the other hundreds of services that the system might interact with can be treated in a uniform way in the language, and can also be treated uniformly with in-memory, in-process systems like hash tables and function calls. This is an incredibly powerful feature.
There's a lot of debate in the language design community over which abstractions are fundamental, which is why you get different languages. But personally, I think you're fine with a.) functions b.) structs (classes when you combine them with functions, and then from there, types, storage, components, composites, subsystems, systems) c.) interfaces (protocols, plugins) and d.) annotations (constraints, async, and marking the special cases of all of these fundamental concepts.). That's really all you need.
- thesuperbigfrog 4y ago>> C++, Java, Go, Ada, Erlang. These are all designed explicitly for programming-in-the-large. Absolutely correct. Each one has strengths and weaknesses and were designed for specific use cases and needs. One of them probably will meet your use case.
- khaledh 4y agoInteresting when you put it this way. > people have found that having hierarchically composable uniform abstractions is a more effective approach for large-scale system design than creating specialized concepts ... Well, I can understand that uniformity can be appealing for sure, but at the same time it doesn't _guide_ the design; too much choice can be paralyzing. The ultimate uniform language is Lisp, but it leaves too much up to the programmer to come up with a sound design. I still think there's room for a more opinionated language when it comes to designing large scale systems (again nothing to do with distributed systems; it could well apply to a monolith).