On Fri, Sep 10, 2010 at 08:19:38PM +0300, Nikhilesh S wrote:
I must start out saying I don't have much experience in software development with larger teams on large projects or with lots of other people, or in 'commercial software development' in companies - I've just done stuff as a hobby in my free time for the past 5 years or so, learning on my own - but I hope to learn more in the coming years (going to university next year).
Wow you write long emails for flame-bait... There's a very good quote to answer your question in brief, C++: an octopus made by nailing extra legs onto a dog.
In C, to the best of my knowledge, either you would do this by having an enum of types and 'switching' on it, or by doing a function pointer table thing (which is functionally (no pun intended) equivalent to a virtual function table right?). So aren't you just building the same idea on it again? I've also seen in a lot of open-source C code some kind of attempt at making OO-stuff in C such as the 'GObject' things. Often a lot of the code is of the form somestruct_dosomething(struct somestruct *p, ... ).
Please don't mention GObject. Nearly anything GNU is not worth mentioning.
I haven't really understood the problems with C++ that the people here that have problems with C++ have, although I must say in recent years (especially with C++0x?) they've been adding a lot of features and it's getting a little 'fat'. Are you just feeling the same thing, just that you probably used C before C++ or have otherwise been at it for a long time and thus this feeling has come in earlier? Maybe C++ is 'complex' but doing things with it is 'simple', whereas it's the other way round in C? Look at ASM and C for instance - I've only lightly touched ASM but I think it's simpler than C but doing things in C is simpler than in ASM. Is C++ broken because no one really understands it fully? Is allowing multiple paradigms in a single langauge a problem? Should language enforce paradigm?
It's not OO that we're against. Not per se, anyway. It's that C++ is simply a poorly designed hodge-podge that basically nails a lot of extra features on C, without any real core design principles, and incidentally kept the heinous old textual preprocessor and added yet another symbolic preprocessor just to insult to insanity. For an example of what C++ should have been, have a look at D, which is easily as simple as C and more powerful than C++. And now there's Go, and there's always been Lisp and Objective-C, both of which have cleaner designs than C++ and follow the original Object Oriented model much better than the latter.
-- Kris Maglione You do not really understand something unless you can explain it to your grandmother. --Albert Einstein