WRT: C++ streams. Just another example of C++ being a crap language syntactically. “Hey! Streaming stuff in my shell scripts is great…let’s toss something like that it!” Yeah…great idea. Mixing styles is always a bad idea.
WRT: C++ in general. Forget about it’s weakness, they’re unimportant. Because some language feature sucks to use in C++ doesn’t mean that it’s bad. The only “bad” feature of C++ in my opinion is multiple inheritance…but maybe that just because all of us have a little bit of a language nanny inside of us. Why not come the conclusion that class-based OO is unusable because of C++?
WRT: Overloading new. I always do. If I’m doing C++ that mean speed is a primary concern, so data flow is going to be important. You can’t just use a single custom allocator, because then you’re stuck with a unified thread-safe heap manager. I’ll have some number of region based (stack like), heap (single & multi-threaded) and pool allocators in a given program.
WRT: Paren operator. I’ve mostly seen that from hard science folks that are probably more use to some DSL (like scilab) and they are attempt to use a familiar syntax. Paren operators should NEVER be overloadable as this leads to an ambiguous syntax. Consider:
public float m(float a, float b)
{
...
}
public void foo(Mat3x3f m)
{
// value of foo depends on if Mat3x3f has overloaded a two parameter paren operator, which could change over the
// lifetime of this code. bad...very very bad.
float foo = m(0,0);
}
Notice, however, that this is not a problem for an array accessor operator. I think that in any language this should be the ultimate litmus test. Never make an ambiguous syntax.
WRT: Cas’s word infix notation. Add a colon and you have SmallTalk. IMHO…bad idea. Again due to mixing syntactic styles.
WRT: Java support muticore like no other? I think Java is very very weak for concurrency.
I love operator overloading. Looking at bad examples in C++ isn’t a proper way to consider the issue. Figuring out what is being executed would be identical to figure out for a named method (i.e. no 1990s grepping all the source files and praying to find it quickly). And I’m sure that Eclipse/Netbeans would render overloaded operators differently from default ones. The trick here is that people that have never needed to do any computational intensive programming with non-primitive types just won’t “get” how awful not have operators is. BUT: for me, operator overloading is a much lower priority that some other features (such as those listed above). And again, I think the most important in terms of wide usage would be getters & setters, which I’m now too lazy to type up a description of why.