|
|
|
1 | (32) |
|
1.1 Software development process |
|
|
1 | (3) |
|
1.2 Languages and software development environments |
|
|
4 | (1) |
|
1.3 Languages and software design methods |
|
|
5 | (3) |
|
1.4 Languages and computer architecture |
|
|
8 | (2) |
|
1.5 Programming language qualities |
|
|
10 | (4) |
|
1.5.1 Languages and reliability |
|
|
11 | (1) |
|
1.5.2 Languages and maintainability |
|
|
12 | (1) |
|
1.5.3 Languages and efficiency |
|
|
13 | (1) |
|
1.6 A brief historical perspective |
|
|
14 | (9) |
|
1.6.1 Early high-level languages |
|
|
17 | (1) |
|
|
|
18 | (1) |
|
|
|
19 | (1) |
|
1.6.4 The next leap forward |
|
|
19 | (1) |
|
1.6.5 The experimental 70s |
|
|
20 | (1) |
|
1.6.6 The 80s and object orientation |
|
|
21 | (1) |
|
|
|
22 | (1) |
|
1.7 A bird's-eye view of programming language concepts |
|
|
23 | (8) |
|
|
|
23 | (2) |
|
1.7.2 Syntax and semantics |
|
|
25 | (1) |
|
|
|
25 | (3) |
|
|
|
25 | (1) |
|
1.7.3.2 Values and references |
|
|
26 | (1) |
|
|
|
27 | (1) |
|
1.7.4 Program organization |
|
|
28 | (2) |
|
1.7.5 Program data and algorithms |
|
|
30 | (1) |
|
|
|
30 | (1) |
|
|
|
31 | (1) |
|
1.7.6 External environment |
|
|
31 | (1) |
|
|
|
31 | (1) |
|
|
|
32 | (1) |
|
|
|
33 | (78) |
|
|
|
34 | (12) |
|
|
|
34 | (5) |
|
2.1.1.1 Abstract syntax, concrete syntax, and pragmatics |
|
|
38 | (1) |
|
|
|
39 | (7) |
|
2.1.2.1 An introduction to formal semantics |
|
|
40 | (6) |
|
|
|
46 | (4) |
|
|
|
46 | (1) |
|
|
|
47 | (2) |
|
2.2.3 The concept of binding |
|
|
49 | (1) |
|
|
|
50 | (11) |
|
|
|
51 | (2) |
|
|
|
53 | (4) |
|
|
|
57 | (1) |
|
|
|
57 | (2) |
|
2.3.5 References and unnamed variables |
|
|
59 | (2) |
|
|
|
61 | (6) |
|
|
|
66 | (1) |
|
2.5 Aliasing and overloading |
|
|
67 | (2) |
|
2.6 An abstract semantic processor |
|
|
69 | (3) |
|
|
|
72 | (34) |
|
2.7.1 C1: A language with only simple statements |
|
|
73 | (1) |
|
2.7.2 C2: Adding simple routines |
|
|
74 | (3) |
|
2.7.3 C3: Supporting recursive functions |
|
|
77 | (5) |
|
2.7.4 C4: Supporting block structure |
|
|
82 | (8) |
|
2.7.4.1 Nesting via compound statements |
|
|
83 | (3) |
|
2.7.4.2 Nesting via locally declared routines |
|
|
86 | (4) |
|
2.7.5 C5: Toward more dynamic behaviors |
|
|
90 | (3) |
|
2.7.5.1 Activation records whose size becomes known at unit activation |
|
|
91 | (1) |
|
2.7.5.2 Fully dynamic data allocation |
|
|
92 | (1) |
|
2.7.6 The structure of dynamic languages |
|
|
93 | (4) |
|
|
|
94 | (1) |
|
|
|
95 | (2) |
|
|
|
97 | (9) |
|
|
|
97 | (5) |
|
2.7.7.2 Routine parameters |
|
|
102 | (4) |
|
|
|
106 | (1) |
|
|
|
107 | (4) |
|
|
|
111 | (62) |
|
3.1 Built-in types and primitive types |
|
|
112 | (3) |
|
3.2 Data aggregates and type constructors |
|
|
115 | (13) |
|
|
|
115 | (2) |
|
|
|
117 | (3) |
|
3.2.3 Union and discriminated union |
|
|
120 | (2) |
|
|
|
122 | (1) |
|
|
|
123 | (1) |
|
|
|
123 | (4) |
|
3.2.6.1 Insecurities of pointers |
|
|
125 | (2) |
|
|
|
127 | (1) |
|
3.3 User-defined types and abstract data types |
|
|
128 | (8) |
|
3.3.1 Abstract data types in C++ |
|
|
129 | (4) |
|
|
|
130 | (1) |
|
|
|
131 | (1) |
|
|
|
132 | (1) |
|
3.3.2 Abstract data types in Eiffel |
|
|
133 | (3) |
|
3.3.2.1 Generic abstract data types |
|
|
136 | (1) |
|
|
|
136 | (13) |
|
3.4.1 Static versus dynamic program checking |
|
|
137 | (1) |
|
3.4.2 Strong typing and type checking |
|
|
138 | (1) |
|
|
|
139 | (3) |
|
|
|
142 | (2) |
|
|
|
144 | (1) |
|
|
|
145 | (1) |
|
3.4.7 Summing up: Monomorphic versus polymorphic type systems |
|
|
146 | (3) |
|
3.5 The type structure of representative languages |
|
|
149 | (11) |
|
|
|
149 | (2) |
|
|
|
151 | (2) |
|
|
|
153 | (7) |
|
3.6 Implementation models |
|
|
160 | (9) |
|
3.6.1 Built-in primitive types and enumerations |
|
|
160 | (1) |
|
|
|
161 | (8) |
|
3.6.2.1 Cartesian product |
|
|
162 | (1) |
|
|
|
163 | (1) |
|
3.6.2.3 Union and discriminated union |
|
|
164 | (1) |
|
|
|
165 | (1) |
|
|
|
166 | (1) |
|
|
|
166 | (1) |
|
3.6.2.7 Pointers and garbage collection |
|
|
167 | (2) |
|
|
|
169 | (1) |
|
|
|
170 | (3) |
|
4 Structuring the computation |
|
|
173 | (66) |
|
4.1 Expressions and statements |
|
|
174 | (5) |
|
4.2 Conditional execution and iteration |
|
|
179 | (7) |
|
4.2.1 Conditional execution |
|
|
179 | (3) |
|
|
|
182 | (4) |
|
|
|
186 | (6) |
|
4.3.1 Style issues: Side effects and aliasing |
|
|
188 | (4) |
|
|
|
192 | (15) |
|
4.4.1 Exception handling in Ada |
|
|
194 | (3) |
|
4.4.2 Exception handling in C++ |
|
|
197 | (3) |
|
4.4.3 Exception handling in Java |
|
|
200 | (1) |
|
4.4.4 Exception handling in Eiffel |
|
|
201 | (3) |
|
4.4.5 Exception handling in ML |
|
|
204 | (1) |
|
4.4.6 A comparative evaluation |
|
|
205 | (2) |
|
|
|
207 | (3) |
|
4.6 Nondeterminism and backtracking |
|
|
210 | (2) |
|
4.7 Event-driven computations |
|
|
212 | (1) |
|
4.8 Concurrent computations |
|
|
213 | (22) |
|
|
|
218 | (1) |
|
4.8.2 Synchronization and communication |
|
|
219 | (10) |
|
|
|
220 | (2) |
|
4.8.2.2 Monitors and signals |
|
|
222 | (3) |
|
|
|
225 | (2) |
|
|
|
227 | (2) |
|
4.8.3 Implementation models |
|
|
229 | (6) |
|
|
|
232 | (1) |
|
4.8.3.2 Monitors and signals |
|
|
233 | (1) |
|
|
|
234 | (1) |
|
|
|
235 | (1) |
|
|
|
236 | (3) |
|
5 Structuring the program |
|
|
239 | (46) |
|
5.1 Software design methods |
|
|
241 | (1) |
|
5.2 Concepts in support of modularity |
|
|
242 | (7) |
|
5.2.1 Encapsulation, interface, and implementation |
|
|
242 | (2) |
|
5.2.2 Separation of interface and implementation |
|
|
244 | (3) |
|
5.2.3 Separate and independent compilation |
|
|
247 | (1) |
|
5.2.4 Libraries of modules |
|
|
248 | (1) |
|
5.3 Language features for programming in the large |
|
|
249 | (26) |
|
|
|
250 | (3) |
|
|
|
253 | (3) |
|
|
|
253 | (1) |
|
5.3.2.2 Interface and implementation |
|
|
253 | (1) |
|
5.3.2.3 Program organization |
|
|
254 | (2) |
|
|
|
256 | (6) |
|
|
|
256 | (1) |
|
5.3.3.2 Program organization |
|
|
257 | (2) |
|
5.3.3.3 Grouping of units |
|
|
259 | (3) |
|
|
|
262 | (8) |
|
|
|
262 | (1) |
|
5.3.4.2 Interface and implementation |
|
|
262 | (1) |
|
5.3.4.3 Program organization |
|
|
263 | (2) |
|
5.3.4.4 Separate compilation |
|
|
265 | (1) |
|
5.3.4.5 Ada's private type |
|
|
266 | (2) |
|
5.3.4.6 Grouping of units |
|
|
268 | (2) |
|
|
|
270 | (4) |
|
|
|
270 | (2) |
|
5.3.5.2 Interface and implementation |
|
|
272 | (2) |
|
5.3.6 Abstract data types, classes, and modules |
|
|
274 | (1) |
|
|
|
275 | (6) |
|
5.4.1 Generic data structures |
|
|
275 | (1) |
|
|
|
276 | (3) |
|
|
|
279 | (1) |
|
5.4.4 Higher levels of genericity |
|
|
279 | (2) |
|
|
|
281 | (1) |
|
|
|
282 | (1) |
|
|
|
282 | (3) |
|
6 Object-oriented languages |
|
|
285 | (48) |
|
6.1 Concepts of object-oriented programming |
|
|
287 | (6) |
|
|
|
288 | (1) |
|
|
|
289 | (1) |
|
|
|
290 | (2) |
|
6.1.4 Dynamic binding of calls to member functions |
|
|
292 | (1) |
|
6.2 Inheritance and the type system |
|
|
293 | (9) |
|
6.2.1 Subclasses versus subtypes |
|
|
294 | (1) |
|
6.2.2 Strong typing and polymorphism |
|
|
294 | (5) |
|
|
|
295 | (1) |
|
6.2.2.2 Overriding of member functions |
|
|
295 | (4) |
|
6.2.3 Inheritance hierarchies |
|
|
299 | (3) |
|
6.2.3.1 Single and multiple inheritance |
|
|
300 | (1) |
|
6.2.3.2 Implementation and interface inheritance |
|
|
301 | (1) |
|
6.3 Object-oriented features in programming languages |
|
|
302 | (25) |
|
|
|
302 | (6) |
|
|
|
303 | (1) |
|
6.3.1.2 Virtual functions and dynamic binding |
|
|
304 | (1) |
|
6.3.1.3 Pure virtual functions for specification |
|
|
305 | (1) |
|
6.3.1.4 Protected members |
|
|
305 | (2) |
|
6.3.1.5 Overloading, polymorphism, and genericity |
|
|
307 | (1) |
|
|
|
308 | (3) |
|
|
|
308 | (2) |
|
6.3.2.2 Dynamic dispatch through classwide programming |
|
|
310 | (1) |
|
6.3.2.3 Abstract types and routines |
|
|
311 | (1) |
|
|
|
311 | (2) |
|
6.3.3.1 Classes and object creation |
|
|
311 | (1) |
|
6.3.3.2 Inheritance and redefinition |
|
|
312 | (1) |
|
|
|
313 | (4) |
|
6.3.4.1 Classes and inheritance |
|
|
313 | (2) |
|
6.3.4.2 Variables and dynamic typing |
|
|
315 | (1) |
|
6.3.4.3 The pervasive role of objects |
|
|
315 | (2) |
|
6.3.4.4 The Smalltalk environment |
|
|
317 | (1) |
|
|
|
317 | (10) |
|
6.3.5.1 Classes and inheritance |
|
|
318 | (2) |
|
6.3.5.2 Interface and inheritance |
|
|
320 | (1) |
|
6.3.5.3 Abstract classes and abstract methods |
|
|
321 | (1) |
|
6.3.5.4 Packages and programming in the large |
|
|
322 | (1) |
|
|
|
322 | (1) |
|
6.3.5.6 Threads and synchronization |
|
|
323 | (4) |
|
|
|
327 | (1) |
|
|
|
327 | (2) |
|
|
|
329 | (4) |
|
7 Functional programming languages |
|
|
333 | (38) |
|
7.1 Characteristics of imperative languages |
|
|
334 | (1) |
|
7.2 Mathematical and programming functions |
|
|
335 | (1) |
|
7.3 Principles of functional programming |
|
|
336 | (6) |
|
7.3.1 Values, bindings, and functions |
|
|
337 | (1) |
|
7.3.2 Lambda calculus: A model of computation by functions |
|
|
338 | (4) |
|
7.4 Representative functional languages |
|
|
342 | (21) |
|
|
|
342 | (5) |
|
|
|
343 | (1) |
|
|
|
343 | (3) |
|
|
|
346 | (1) |
|
|
|
347 | (1) |
|
|
|
347 | (5) |
|
|
|
347 | (1) |
|
|
|
348 | (1) |
|
|
|
349 | (2) |
|
|
|
351 | (1) |
|
|
|
352 | (11) |
|
7.4.3.1 The list data object and its operations |
|
|
353 | (1) |
|
7.4.3.2 Bindings, values, and types |
|
|
353 | (1) |
|
|
|
354 | (1) |
|
|
|
355 | (1) |
|
|
|
356 | (3) |
|
|
|
359 | (2) |
|
|
|
361 | (2) |
|
7.5 Functional programming in C++ |
|
|
363 | (5) |
|
7.5.1 Functions as objects |
|
|
364 | (1) |
|
|
|
364 | (3) |
|
|
|
367 | (1) |
|
|
|
368 | (1) |
|
|
|
368 | (1) |
|
|
|
369 | (2) |
|
8 Logic and rule-based languages |
|
|
371 | (31) |
|
8.1 "What" versus "how": Specification versus implementation |
|
|
371 | (6) |
|
|
|
373 | (2) |
|
|
|
375 | (2) |
|
8.2 Principles of logic programming |
|
|
377 | (12) |
|
8.2.1 Preliminaries: Facts, rules, queries, and deductions |
|
|
377 | (6) |
|
8.2.2 An abstract interpretation algorithm |
|
|
383 | (6) |
|
|
|
389 | (4) |
|
8.4 Functional programming versus logic programming |
|
|
393 | (2) |
|
|
|
395 | (3) |
|
|
|
398 | (1) |
|
|
|
399 | (3) |
|
|
|
402 | (7) |
|
|
|
403 | (2) |
|
|
|
405 | (1) |
|
|
|
406 | (1) |
|
|
|
406 | (3) |
| Appendix: Language references |
|
409 | (2) |
| Bibliography |
|
411 | (8) |
| Index |
|
419 | |