近来在sdmagazine上面看到的一篇好文章,决定与大家共享。不过由于最近忙,就不翻译了^_^
More ++, Less C
Standard template libraries, abstract classes and multiparadigm programming are keys to high performance.
"Too much C++ code is just C. For example, people do class hierarchies in a very naïve way. They think of a few implementation details that are common and they throw them into a base class. I have been preaching about this for nearly 15 years, and nobody listens. It's so much easier to make your own mistakes than to listen," lectured Bjarne Stroustrup, creator of the C++ language in his Tuesday, August 28, 2001 keynote at the Software Development East conference in Boston. Now head of AT&T's Large-Scale Programming Research Department in Florham Park, New Jersey, Stroustrup continues his focus on efficient algorithms and high performance. The solution to the problem of overloaded base classes, said Stroustrup, is to write interfaces that are totally abstract. "Writing code like this is a bit tedious because of the repetition, but if you have a concept, make it a class. This is one way to handle common state."
Beginning his talk with a graph depicting the performance of linear algebra calculations programmed in C++ and Fortran, Stroustrup pointed out that, while beating Fortran at what it does best is difficult, it can be done. "These are my semi-arm-waving comments on efficiency. Efficiency matters—not everywhere, but in embedded systems and performance numerics, which are areas that interest me, it does." What is slowing down C++ coders everywhere? First, too much reinvention of the wheel, he said. "If you think you can build a matrix library, go ahead, but there are many already available." He also lambasted "Smalltalk-style" hierarchies and showed several code snippets explaining how to better manage resources.
"Say you acquire a resource and then you close it out at the end. What if you never get to the end?" he asked rhetorically. "OK, so you open a try block, catch the exception… But there is something fundamentally wrong with this solution. Your code has roughly doubled in size. You're better off creating a class with a destructor." Object-oriented programming, Stroustrup went on to say, is really just one of several paradigms C++ users have at their disposal. Multiparadigm programs that use OO, generic programming and data abstraction are powerful ways to achieve fast performance and power.
"If you were designing C++ today, would you do anything differently?" an audience member asked. "Undoubtedly," responded Stroustrup. "Language design is a response to a set of problems you are facing at a point in time. I would want to support direct representation. I would not, however, build a high-level language and sacrifice efficiency. A lot of times, that question really is, 'Did you really mean to design something like Java but you couldn't?' and the answer is no. In terms of performance, C++ and Java don't mesh. I could make a similar statement about C#, but I won't. You also have to remember that I don't like proprietary languages."
So how will C++ evolve over the next 10 years? "Templated type definitions should be there," Stroustrup predicted. "The main effort should be in standardizing some of the libraries. It's not going to be easy, but I see it as a language that maintains its emphasis on run-time efficiency. The area I'm most interested in is distributed computing. I don't see any real likelihood of changes in C++ for supporting Web development; that belongs in the area of libraries. Whether any such libraries can be standardized is a big question, though. I have my doubts."
—Alexandra Weber Morales
Software Development Magazine