Previous | Table of Contents | Next |
C++ was designed to be a viable language in a tool-poor environment. This was partly a necessity because of the almost complete lack of resources in the early years and the relative poverty later. It was also a conscious decision to allow simple implementations and, in particular, simple porting of implementations.
Later, C++ programming environments emerged that are a match for the environments habitually supplied with other object-oriented languages. For example, ObjectWorks for C++ from ParcPlace was essentially the best Smalltalk program development environment adapted for C++, and Centerline C++ (formerly Saber C++) was an interpreter-based C++ environment inspired by the Interlisp environment. This gave C++ programmers the option of using the more whizzy, more expensive, and often more productive environments that have previously only been available for other languages or as research toys. An environment is a framework in which tools can cooperate. Later, a host of such environments for C++ appeared. Most C++ implementations on PCs are compilers embedded in a framework of editors, tools, file systems, standard libraries, and so on. MacApp and the Mac MPW were the Apple Macintosh versions of that; ET++ was a public domain version in the style of the MacApp. Lucids Energize, HPs Softbench, and IBMs Visual Works were yet other examples.
6.7.4.1. Early Libraries
There were and are many significant C++ libraries. Most were domain specific or even application specific, such as a library for building systems controlling a telephone operators console. However, some were foundation libraries that acted as a kind of standard library for a particular implementation or platform. These are mentioned only briefly here because even though they were essential to their users, they did not affect the development of C++ significantly.
The most significant early libraries were Keith Gorlens (Gorlen, 1990) NIH class library that provides a Smalltalk-like set of classes and Mark Lintons Interviews library (Linton & Calder, 1987) that makes use of the X Window system convenient from C++. GNU C++ (G++) came with a library designed by Doug Lea that was distinguished by heavy use of abstract base classes. Rogue Wave and Dyad supplied large sets of libraries primarily aimed at scientific uses. Rogue Wave and the Irish company Glockenspiel for years supplied libraries for various commercial uses. Rational shipped a C++ version of The Booch Components that was originally designed for and implemented in Ada86 by Grady Booch. Grady Booch and Mike Vilot designed and implemented the C++ version. The Ada86 version was 150,000 non-commented source lines compared to the C++ versions 10,000 lines; inheritancecombined with templates and constructors and destructorscan be a very powerful mechanism for organizing libraries without loss of performance or clarity.
This is only a very short list of early libraries to indicate the diversity of C++ libraries. Many more libraries exist. In particular, most tools suppliers provide foundation libraries for their users. It seems that the software components industry that pundits have promised for yearsand bemoaned the lack ofhas finally come into existence.
Commercial competitors were largely ignored and the C++ language was developed according to the original plan, its own internal logic, and the experience of its users. There was (and is) always much discussion among programmers, in the press, at conferences, and on the electronic bulletin boards about which language is best and which language will win some sort of competition for users. Personally, I consider much of that debate misguided and uninformed, but that doesnt make the issues less real to a programmer, manager, or professor who has to choose a programming language for his or her next project. For good and bad, people debate programming languages with an almost religious fervor and often consider the choice of programming language the most important choice of a project or organization.
In the early years, Modula-2 (Wirth, 1982) was by many considered a competitor to C++. However, until the commercial release of C++ in 1985, C++ could hardly be considered a competitor to any language, and by then Modula-2 seemed to me to have been largely outcompeted by C. Later, it was popular to speculate about whether C++ or Objective C (Cox, 1986) was to be the Object-Oriented C. Ada (Ichbiah, 1979) was often a possible choice of organizations who might use C++. In addition, Smalltalk (Goldberg & Robson, 1983) and some object-oriented variant of Lisp (Kiczales, des Rivieres, & Bobrow, 1992) would often be considered for applications that did not require hard-core systems work or maximum performance. Lately, some people have been comparing C++ with Eiffel (Meyer, 1988) and Modula-3 (Nelson, 1991) for some uses.
My personal view is different. The main competitor to C++ was C. The reason that C++ is the most widely used object-oriented language today is that it was and is the only one that could consistently match C on Cs own turf and that allows a transition path from C to a style of system design and implementation based on a more direct mapping between application-level concepts and language concepts (usually called data abstraction or object-oriented programming). Secondarily, many organizations that consider a new programming language have a tradition for the use of an in-house language (usually a Pascal variant) or Fortran. Except for serious scientific computation, these languages can be considered roughly equivalent to C when compared with C++.
Previous | Table of Contents | Next |