22 ;;Quote: operating system research influenced C++: protection from access rights, initialization from capabilities, const from read/write access protection, exception handling from fault-tolerant systems
|
30 ;;Quote: a C++ class defines the type of members that represent an object, operations that manipulate objects, and access rights
|
36 ;;Quote: the C++ type system uses name equivalence instead of structural equivalence because it is safer and cleaner; everything has exactly one definition
|
36+;;Quote: C++ defines layout compatibility rules for structurally equivalent objects; allows explicit conversions for low-level services
|
37 ;;Quote: it is hard for a program to guarantee uniqueness, data type consistency, and initialization
|
37 ;;Quote: C++ is just one language in a system; it must work with program fragments written in other languages
|
41 ;;Quote: automatic conversion to smaller objects widely used; e.g., from 'int' to 'char'; could not remove from C++
|
57 ;;Quote: 'new' creates an object from raw memory by allocating the memory and calling a constructor to initialize that memory
|
59 ;;Quote: C++ has copy constructors because it is inefficient to first initialize an object to a default value and then assigning an object
|
80 ;;Quote: need implicit conversions for mixed-mode operations; otherwise get a quadratic explosion of functions
|
99 ;;Quote: allow declarations were needed. Used for initialize-only/single-assignment programming, references, initialized constants, and efficiency.
|
100 ;;Quote: every statement and declaration should be an expression that yields a value
|
100+;;Quote: should disallow uninitialized variables and multiple names per declaration
|
107 ;;Quote: static type checking avoids dynamic type errors and encourages a well-thought-out design
|
111 ;;Quote: a programming language must be useful to the average programmer using an average computer
|
111+;;Quote: most programming is mundane; done on low-powered computers with dated operating systems and tools
|
115 ;;Quote: a programming language should bridge the gap between ideas and computational primitives
|
115+;;Quote: to make a programming language more expressive, use declarative structures and explicit notation
|
116 ;;Quote: need to compose large and complex applications from separately developed parts without modification
|
121 ;;Quote: C++ follows the zero-overhead rule: a new feature can not decrease the efficiency of programs without the feature
|
155 ;;Quote: can use long, informative argument names in header files and short, convenient names in definitions; e.g., 'length_of_element_array' and 'n'
|
155 ;;Quote: with object-oriented programming, long argument lists and global variables become local state
|
155+;;Quote: keyword arguments are most useful in poorly written code; functions should have at most two arguments
|
157 ;;Quote: Fortran guarantees that multiple array arguments do not overlap; allows spectacular savings on vector hardware
|
158 ;;Quote: C++ lacks a 'no-alias' property because it can't be guaranteed, it may lead to accidental errors, and it is targeted to vectorizing computers
|
159 ;;Quote: the characters [, ], {, }, |, \, and ! are missing from widely used character sets; need to provide equivalent representations
|
190 ;;Quote: for concurrency, locking data is more fundamental than multi-tasking
|
190+;;Quote: use destructors to release a lock for exclusive access to data; simpler, more reliable, handles exceptions
|
201 ;;Quote: even though C and C++ are excellent languages for low-level systems work, assembly code can be significantly smaller and faster, and expensive to maintain
|
207 ;;Quote: want automatic, incremental compilation for minor changes
|
207+;;Quote: want easy access to program information that is derived by compilers
|
214 ;;Quote: 'new' needs memory placement arguments for hardware-specific addresses, custom memory allocation, and general resource management
|
225 ;;Quote: 'void*' is the root of the tree of class conversions; it is used if no other function matches a "more derived" class
|
304 ;;Quote: use pointers to data members to express the layout of a C++ class in an implementation-independent manner
|
307 ;;Quote: C++ run-time type mechanism: 'dynamic_cast' from a base class, an explicit 'typeid', and implementation 'type_info'
|
386 ;;Quote: need to define groups of exceptions; e.g., to catch any I/O library exception
|
388 ;;Quote: resource acquisition is initialization: resources released in reverse order of acquisition, and exceptions release allocated resources
|
391 ;;Quote: use termination instead of resumption for exception handling: simpler, discourages resource allocation attempts, resumption is not necessary
|
391+;;Quote: on resource exhaustion, do not attempt to allocate needed resources and resume. It leads to complicated interactions between a library and its users
|
392 ;;Quote: despite having resumption in Cedar/Mesa, every use of resumption become a problem and a better design replaced it
|
394 ;;Quote: need to map asynchronous events such as interrupts and exceptions to a process model as quickly as possible
|
394+;;Quote: nested, asynchronous exception handling is a prescription for chaos
|
397 ;;Quote: implement exception handling with a table of code address ranges, destructors, and exception handlers
|
404 ;;Quote: replace global declarations with a namespace; define a local synonym for the namespace and allow use of common namespaces without explicit name qualification
|