Apache resigns from the Java Community Process executive committee
Posted Dec 21, 2010 23:07 UTC (Tue) by
HelloWorld (guest, #56129)
In reply to:
Apache resigns from the Java Community Process executive committee by cmccabe
Parent article:
Apache resigns from the Java Community Process executive committee
You're missing the point. vtables can be useful, but you just don't need them that often.
The funny thing is that you wrote the rebuttal to this statement yourself only a few lines later: "There are numerous examples of vtables in the Linux kernel".
The fact that there is a special syntax in C++ encourages people to write bad code.
Limiting the language in order to prevent programmers from writing bad code never worked and it never will, since bad programmers will find other ways to write a bad program. On the other hand, you're making life harder for the people who are able to use advanced features in the language sensibly. This looks like a very bad tradeoff to me.
C++'s special syntax for vtables makes it quicker to create them, but does it make it easier to do it correctly? In my experience, most C++ programmers don't know the hidden gotchas that lurk everywhere once you first type "virtual."
For example, what's the problem here?
class Foo {
public:
virtual ~Foo() { log("destroying Foo."); }
protected:
virtual void log(const std::string & foo) { }
};
class LoggedFoo : public Foo {
public:
protected:
virtual void log(const std::string & str) {
std::cout << "logging important message " << str << std::endl;
}
};
I don't know what you expected the program to do, so how am I supposed to know what you consider to be a problem? Perhaps you meant that ~Foo will call Foo::log and not LoggedFoo::log. I believe that this is a Good Thing. LoggedFoo may have introduced a new meber variable x, and if LoggedFoo::log would use x somewhere, it'd blow up when called by ~Foo, as x would already have been destroyed at that point.
If you don't want a garbage collector, why not just write it in C?
Because C doesn't offer me the features I want. I want type-safe containers (read: templates), I want OOP, I want exceptions and I want destructors. C doesn't have those, and I actively hate C for this (amongst other things).
C++ represents the awkward, error-prone adolescence of higher-level languages, not their future.
No, C++ was never meant to rival high level languages. When it was designed, high-level languages like Smalltalk existed, and Bjarne deliberately designed C++ differently, because he wanted to do low-level work.
Of course, C++ has its share of problems, many of which are either due to its low-level nature or inherited by C (weak type system, bad syntax, horrible preprocessor), so I'd certainly pick a higher-level language over C++ when that is possible. But if the choice is between C and C++, I know what to choose.
(
Log in to post comments)