(desev)Top

Up: (ref.doc)

The Design and Evolution of C++
by Bjarne Stroustrup
Addison-Wesley 1994

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[:]

Support sound design rules
Provide facilities for program organization
Say what you mean
All features must be affordable
It is more important to allow a useful feature than to prevent every misuse
Support composition of software from separately developed parts

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.

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]

automatically generated by info2www version 1.2.2.8