352 ;;Quote: Algol was an improvement on its predecessors and nearly all of its successors
|
507 ;;Quote: the primary purpose of a programming language is to help the programmer
|
508 ;;Quote: it is hard to decide what a program does and specify it precisely and clearly
|
508+;;Quote: divide a complex task into simpler subtasks; specify purpose of each subtask; define efficient, precise interfaces between the subtasks
|
508 ;;Quote: a programming language should express the strategy of a program, its goals, and the details of coding and data
|
508 ;;Quote: a programming language should assist with the harmonious integration of separately developed modules; enforce conventions and disciplines
|
508 ;;Quote: documentation should be an integral part of design and coding
|
508 ;;Quote: the readability of programs is immeasurably more important than their writeability; self-documenting code; pleasant style
|
509 ;;Quote: debugging is tiresome, expensive, and unpredictable, particularly when integrating subprograms from many programmers
|
509 ;;Quote: a programming notation should reduce coding errors, and detect the remaining errors at compile-time
|
509 ;;Quote: a programming language is secure if it does not lead to machine or implementation effects that are inexplicable in terms of the language
|
509 ;;Quote: fast compilation for rapid turnaround; fast code for instrumenting a program
|
509 ;;Quote: a programming language must be simple; easily learned, easily used, easy to understand
|
510 ;;Quote: assembly code is simple, uniform, and easily defined; immediate feedback on time and space efficiency; surprisingly effective
|
511 ;;Quote: orthogonality -- hardware designers have learned more sense; but language designers are clever programmers and have not
|
512 ;;Quote: it is absurd to make elaborate security checks on debugging runs, and then remove them in production runs, when an erroneous result could be disastrous
|
512 ;;Quote: speed of compilation is important for debugging
|
513 ;;Quote: store program as tokens; skips lexical scan, reduces file size, allows full listing
|
513 ;;Quote: use precompile to save the compiler state after processing any initial segment of a program
|
514 ;;Quote: efficient object code is important; allows better-structured and clearer programs
|
515 ;;Quote: a compiler should produce efficient, compact code similar to a resolutely non-clever machine code programmer
|
516 ;;Quote: a machine-independent optimizer should be able to transform an inefficient program into a more efficient one with identical effects, expressed in the same language
|
516 ;;Quote: programming languages should emphasize readability by human beings, not computers
|
516+;;Quote: programming languages should not favour abbreviation of writing by default conventions and implicit assumptions
|
516 ;;Quote: review a program before compilation
|
516 ;;Quote: assembly programming uses simple conventions for comments; conventions for programming languages may be error-prone
|
518 ;;Quote: a compiler should pinpoint syntactic errors, diagnose the cause, and continuing checking the program
|
520 ;;Quote: principles of structuring -- transparency of meaning and purpose, recursive application, narrow interface, manifestness of structure
|
520+;;Quote: understand X+Y by recursively understanding each part independently; manifest structure, clear meaning and purpose
|
520+;;Quote: the interface between the parts of X+Y is a single number
|
521 ;;Quote: arithmetic expressions are highly efficient because of the extreme narrowness of the interface; a single number stored in a high-speed register
|
521 ;;Quote: for large operands, update is more efficient than replacement; provide notation, e.g., L1.append(L2)
|
523 ;;Quote: defined case construction for selection by value; no trace of compensating disadvantage
|
524 ;;Quote: machine code programming allows any change; errors may be hard to trace, especially with index registers
|
524 ;;Quote: the interface between two machine code instructions is the entire machine
|
524 ;;Quote: variables, arrays, files splits a machine into disjoint areas; updating one does not effect the others
|
525 ;;Quote: references have no meaning independent of a particular run of a program; cannot be input or output
|
525+;;Quote: references are like jumps, leading wildly from one part of a data structure to another; change can update any location
|
526 ;;Quote: block structure limits the scope of a variable; accessible from elsewhere only as a parameter
|
527 ;;Quote: design and implement a special-purpose programming language for every large-scale programming project; i.e., procedures and parameters
|
527+;;Quote: procedures and parameters afford all the major advantages of extensible languages, plus space efficiency
|
527+;;Quote: the language designer should give the greatest attention to procedures and parameters
|
527+;;Quote: calling sequences must be compact
|
528 ;;Quote: a variable should not be passed twice as distinct parameters; prohibited in standard FORTRAN
|
528 ;;Quote: type errors are a problem for machine programming; e.g., using an integer as an address
|
528+;;Quote: computer hardware can execute almost any sequence of instructions; the secret of its power, flexibility, simplicity, and reliability
|
530 ;;Quote: specify units for data types for consistency checks; e.g., height vs. weight, radians vs. degrees
|
531 ;;Quote: design one language feature at a time; improvement, efficient, documentation, security, examples, proof rule
|
531 ;;Quote: the language designer selects the best features instead of designing new ones; clear idea of scope, purpose, complexity
|
531 ;;Quote: listen carefully to what users want; understand what they really want; achieve the latter at a fraction of the cost of the former
|
531+;;Quote: cost-effective success in language design is progress in programming methodology
|