The Design and Evolution of C++

Marc's pointers

Programming Languages, p 7

[T]here is no agreement on what a programming language really is and what its main purpose is supposed to be. Is a programming language a tool for instructing machines? A means of communicating between programmers? A vehicle for expressing high-level designs? A notation for algorithms? A way of expressing relationships between concepts? A tool for experimentation? A means of controlling computerized devices? My view is that a general-purpose language must be all of those to serve its diverse sets of users.
It is my firm belief that all successful languages are grown and not merely designed from first principles.

2.5 The Linkage Model, p 35

I also made matters worse for the C++ community by not properly explaining the use of derived classes to achieve the separation of interface and implementation. [See: The C++ Programming Language, 7.6.2]

2.7 Why C? p 44

A programming language serves two purposes: it provides a vehicle for the programmer to specify actions to be executed and a set of concepts for the programmer to use when thinking about what can be done.

2.8.1 The C Declaration Syntax, p 47

[P]eople build complicated types incrementally using typedef:
 typedef int* DtoI(double); // function taking a double and returning a
                            // pointer to int
 typedef DtoI* V10[10];     // array of 10 pointers to DtoI
[Examples of correct and useful uses of typedef]

2.14 Work Environment, p 60

There [Bell Labs] was a cultural bias against ``grand projects'' that required more than a couple of people, against ``grand plans'' like untested paper designs for others to implement, and against a class distinction between designers and implementers.

3.15 The Whatis? Paper, p 106

``Object-oriented programming is programming using inheritance. Data abstraction is programming using user-defined types. With few exceptions, object-oriented programming can and ought to be a superset of data abstraction. These techniques need proper support to be effective. Data abstraction needs support in the form of language features, and object-oriented programming needs support from a programming environment.''

4.3 Design Support Rules, p 114

The rules listed here [are] concerned with the language's role as a support for thinking[:]

9.4.4 Beyond Files and Syntax, p 207

Let me outline the program development environment I'd like for C++. First of all, I want incremental compilation. When I make a minor change, I want ``the system'' to note that the change was minor and have the new version compiled and ready to run in a second. Similarly, I want simple requests, such as ``Show me the declaration of this f?'' ``What f's are in scope here?'' ``What is the resolution of this use of +?'' ``Which classes are derived from class Shape?'' and ``What destructors are called at the end of this block?'' answered in a second.
A C++ program contains a wealth of information that in a typical environment is available only to a compiler. I want that information at the programmer's fingertips. However, most people look at a C++ program as a set of source files or as a string of characters. That is to confuse the representation with what is represented. A program is a collection of types, functions, statements, etc.

12.3.1 Virtual Bases and Virtual Functions [A concise description of the mixin technology]

15.8 Composition Techniques, p 357

class Derived: public Base<Derived>

15.9.1 Inheritance Relationships, 361
[Member templates as a solution to the problem of providing inheritance relationships for smart pointers]

Table of contents
Marc Girod
Last modified: Thu Mar 5 13:55:13 EET 1998