%PDF-1.5 % 1 0 obj << /S /GoTo /D (section.1) >> endobj 4 0 obj (1 Introduction) endobj 5 0 obj << /S /GoTo /D (subsection.1.1) >> endobj 8 0 obj (1.1 Our Philosophy) endobj 9 0 obj << /S /GoTo /D (subsection.1.2) >> endobj 12 0 obj (1.2 The Structure of This Book) endobj 13 0 obj << /S /GoTo /D (subsection.1.3) >> endobj 16 0 obj (1.3 The Language of This Book) endobj 17 0 obj << /S /GoTo /D (section.2) >> endobj 20 0 obj (2 Everything \(We Will Say\) About Parsing) endobj 21 0 obj << /S /GoTo /D (subsection.2.1) >> endobj 24 0 obj (2.1 A Lightweight, Built-In First Half of a Parser) endobj 25 0 obj << /S /GoTo /D (subsection.2.2) >> endobj 28 0 obj (2.2 A Convenient Shortcut) endobj 29 0 obj << /S /GoTo /D (subsection.2.3) >> endobj 32 0 obj (2.3 Types for Parsing) endobj 33 0 obj << /S /GoTo /D (subsection.2.4) >> endobj 36 0 obj (2.4 Completing the Parser) endobj 37 0 obj << /S /GoTo /D (subsection.2.5) >> endobj 40 0 obj (2.5 Coda) endobj 41 0 obj << /S /GoTo /D (section.3) >> endobj 44 0 obj (3 A First Look at Interpretation) endobj 45 0 obj << /S /GoTo /D (subsection.3.1) >> endobj 48 0 obj (3.1 Representing Arithmetic) endobj 49 0 obj << /S /GoTo /D (subsection.3.2) >> endobj 52 0 obj (3.2 Writing an Interpreter) endobj 53 0 obj << /S /GoTo /D (subsection.3.3) >> endobj 56 0 obj (3.3 Did You Notice?) endobj 57 0 obj << /S /GoTo /D (subsection.3.4) >> endobj 60 0 obj (3.4 Growing the Language) endobj 61 0 obj << /S /GoTo /D (section.4) >> endobj 64 0 obj (4 A First Taste of Desugaring) endobj 65 0 obj << /S /GoTo /D (subsection.4.1) >> endobj 68 0 obj (4.1 Extension: Binary Subtraction) endobj 69 0 obj << /S /GoTo /D (subsection.4.2) >> endobj 72 0 obj (4.2 Extension: Unary Negation) endobj 73 0 obj << /S /GoTo /D (section.5) >> endobj 76 0 obj (5 Adding Functions to the Language) endobj 77 0 obj << /S /GoTo /D (subsection.5.1) >> endobj 80 0 obj (5.1 Defining Data Representations) endobj 81 0 obj << /S /GoTo /D (subsection.5.2) >> endobj 84 0 obj (5.2 Growing the Interpreter) endobj 85 0 obj << /S /GoTo /D (subsection.5.3) >> endobj 88 0 obj (5.3 Substitution) endobj 89 0 obj << /S /GoTo /D (subsection.5.4) >> endobj 92 0 obj (5.4 The Interpreter, Resumed) endobj 93 0 obj << /S /GoTo /D (subsection.5.5) >> endobj 96 0 obj (5.5 Oh Wait, There's More!) endobj 97 0 obj << /S /GoTo /D (section.6) >> endobj 100 0 obj (6 From Substitution to Environments) endobj 101 0 obj << /S /GoTo /D (subsection.6.1) >> endobj 104 0 obj (6.1 Introducing the Environment) endobj 105 0 obj << /S /GoTo /D (subsection.6.2) >> endobj 108 0 obj (6.2 Interpreting with Environments) endobj 109 0 obj << /S /GoTo /D (subsection.6.3) >> endobj 112 0 obj (6.3 Deferring Correctly) endobj 113 0 obj << /S /GoTo /D (subsection.6.4) >> endobj 116 0 obj (6.4 Scope) endobj 117 0 obj << /S /GoTo /D (subsubsection.6.4.1) >> endobj 120 0 obj (6.4.1 How Bad Is It?) endobj 121 0 obj << /S /GoTo /D (subsubsection.6.4.2) >> endobj 124 0 obj (6.4.2 The Top-Level Scope) endobj 125 0 obj << /S /GoTo /D (subsection.6.5) >> endobj 128 0 obj (6.5 Exposing the Environment) endobj 129 0 obj << /S /GoTo /D (section.7) >> endobj 132 0 obj (7 Functions Anywhere) endobj 133 0 obj << /S /GoTo /D (subsection.7.1) >> endobj 136 0 obj (7.1 Functions as Expressions and Values) endobj 137 0 obj << /S /GoTo /D (subsection.7.2) >> endobj 140 0 obj (7.2 Nested What?) endobj 141 0 obj << /S /GoTo /D (subsection.7.3) >> endobj 144 0 obj (7.3 Implementing Closures) endobj 145 0 obj << /S /GoTo /D (subsection.7.4) >> endobj 148 0 obj (7.4 Substitution, Again) endobj 149 0 obj << /S /GoTo /D (subsection.7.5) >> endobj 152 0 obj (7.5 Sugaring Over Anonymity) endobj 153 0 obj << /S /GoTo /D (section.8) >> endobj 156 0 obj (8 Mutation: Structures and Variables) endobj 157 0 obj << /S /GoTo /D (subsection.8.1) >> endobj 160 0 obj (8.1 Mutable Structures) endobj 161 0 obj << /S /GoTo /D (subsubsection.8.1.1) >> endobj 164 0 obj (8.1.1 A Simple Model of Mutable Structures) endobj 165 0 obj << /S /GoTo /D (subsubsection.8.1.2) >> endobj 168 0 obj (8.1.2 Scaffolding) endobj 169 0 obj << /S /GoTo /D (subsubsection.8.1.3) >> endobj 172 0 obj (8.1.3 Interaction with Closures) endobj 173 0 obj << /S /GoTo /D (subsubsection.8.1.4) >> endobj 176 0 obj (8.1.4 Understanding the Interpretation of Boxes) endobj 177 0 obj << /S /GoTo /D (subsubsection.8.1.5) >> endobj 180 0 obj (8.1.5 Can the Environment Help?) endobj 181 0 obj << /S /GoTo /D (subsubsection.8.1.6) >> endobj 184 0 obj (8.1.6 Introducing the Store) endobj 185 0 obj << /S /GoTo /D (subsubsection.8.1.7) >> endobj 188 0 obj (8.1.7 Interpreting Boxes) endobj 189 0 obj << /S /GoTo /D (subsubsection.8.1.8) >> endobj 192 0 obj (8.1.8 The Bigger Picture) endobj 193 0 obj << /S /GoTo /D (subsection.8.2) >> endobj 196 0 obj (8.2 Variables) endobj 197 0 obj << /S /GoTo /D (subsubsection.8.2.1) >> endobj 200 0 obj (8.2.1 Terminology) endobj 201 0 obj << /S /GoTo /D (subsubsection.8.2.2) >> endobj 204 0 obj (8.2.2 Syntax) endobj 205 0 obj << /S /GoTo /D (subsubsection.8.2.3) >> endobj 208 0 obj (8.2.3 Interpreting Variables) endobj 209 0 obj << /S /GoTo /D (subsection.8.3) >> endobj 212 0 obj (8.3 The Design of Stateful Language Operations) endobj 213 0 obj << /S /GoTo /D (subsection.8.4) >> endobj 216 0 obj (8.4 Parameter Passing) endobj 217 0 obj << /S /GoTo /D (section.9) >> endobj 220 0 obj (9 Recursion and Cycles: Procedures and Data) endobj 221 0 obj << /S /GoTo /D (subsection.9.1) >> endobj 224 0 obj (9.1 Recursive and Cyclic Data) endobj 225 0 obj << /S /GoTo /D (subsection.9.2) >> endobj 228 0 obj (9.2 Recursive Functions) endobj 229 0 obj << /S /GoTo /D (subsection.9.3) >> endobj 232 0 obj (9.3 Premature Observation) endobj 233 0 obj << /S /GoTo /D (subsection.9.4) >> endobj 236 0 obj (9.4 Without Explicit State) endobj 237 0 obj << /S /GoTo /D (section.10) >> endobj 240 0 obj (10 Objects) endobj 241 0 obj << /S /GoTo /D (subsection.10.1) >> endobj 244 0 obj (10.1 Objects Without Inheritance) endobj 245 0 obj << /S /GoTo /D (subsubsection.10.1.1) >> endobj 248 0 obj (10.1.1 Objects in the Core) endobj 249 0 obj << /S /GoTo /D (subsubsection.10.1.2) >> endobj 252 0 obj (10.1.2 Objects by Desugaring) endobj 253 0 obj << /S /GoTo /D (subsubsection.10.1.3) >> endobj 256 0 obj (10.1.3 Objects as Named Collections) endobj 257 0 obj << /S /GoTo /D (subsubsection.10.1.4) >> endobj 260 0 obj (10.1.4 Constructors) endobj 261 0 obj << /S /GoTo /D (subsubsection.10.1.5) >> endobj 264 0 obj (10.1.5 State) endobj 265 0 obj << /S /GoTo /D (subsubsection.10.1.6) >> endobj 268 0 obj (10.1.6 Private Members) endobj 269 0 obj << /S /GoTo /D (subsubsection.10.1.7) >> endobj 272 0 obj (10.1.7 Static Members) endobj 273 0 obj << /S /GoTo /D (subsubsection.10.1.8) >> endobj 276 0 obj (10.1.8 Objects with Self-Reference) endobj 277 0 obj << /S /GoTo /D (subsubsection.10.1.9) >> endobj 280 0 obj (10.1.9 Dynamic Dispatch) endobj 281 0 obj << /S /GoTo /D (subsection.10.2) >> endobj 284 0 obj (10.2 Member Access Design Space) endobj 285 0 obj << /S /GoTo /D (subsection.10.3) >> endobj 288 0 obj (10.3 What \(Goes In\) Else?) endobj 289 0 obj << /S /GoTo /D (subsubsection.10.3.1) >> endobj 292 0 obj (10.3.1 Classes) endobj 293 0 obj << /S /GoTo /D (subsubsection.10.3.2) >> endobj 296 0 obj (10.3.2 Prototypes) endobj 297 0 obj << /S /GoTo /D (subsubsection.10.3.3) >> endobj 300 0 obj (10.3.3 Multiple Inheritance) endobj 301 0 obj << /S /GoTo /D (subsubsection.10.3.4) >> endobj 304 0 obj (10.3.4 Super-Duper!) endobj 305 0 obj << /S /GoTo /D (subsubsection.10.3.5) >> endobj 308 0 obj (10.3.5 Mixins and Traits) endobj 309 0 obj << /S /GoTo /D (section.11) >> endobj 312 0 obj (11 Memory Management) endobj 313 0 obj << /S /GoTo /D (subsection.11.1) >> endobj 316 0 obj (11.1 Garbage) endobj 317 0 obj << /S /GoTo /D (subsection.11.2) >> endobj 320 0 obj (11.2 What is ``Correct'' Garbage Recovery?) endobj 321 0 obj << /S /GoTo /D (subsection.11.3) >> endobj 324 0 obj (11.3 Manual Reclamation) endobj 325 0 obj << /S /GoTo /D (subsubsection.11.3.1) >> endobj 328 0 obj (11.3.1 The Cost of Fully-Manual Reclamation) endobj 329 0 obj << /S /GoTo /D (subsubsection.11.3.2) >> endobj 332 0 obj (11.3.2 Reference Counting) endobj 333 0 obj << /S /GoTo /D (subsection.11.4) >> endobj 336 0 obj (11.4 Automated Reclamation, or Garbage Collection) endobj 337 0 obj << /S /GoTo /D (subsubsection.11.4.1) >> endobj 340 0 obj (11.4.1 Overview) endobj 341 0 obj << /S /GoTo /D (subsubsection.11.4.2) >> endobj 344 0 obj (11.4.2 Truth and Provability) endobj 345 0 obj << /S /GoTo /D (subsubsection.11.4.3) >> endobj 348 0 obj (11.4.3 Central Assumptions) endobj 349 0 obj << /S /GoTo /D (subsection.11.5) >> endobj 352 0 obj (11.5 Convervative Garbage Collection) endobj 353 0 obj << /S /GoTo /D (subsection.11.6) >> endobj 356 0 obj (11.6 Precise Garbage Collection) endobj 357 0 obj << /S /GoTo /D (section.12) >> endobj 360 0 obj (12 Representation Decisions) endobj 361 0 obj << /S /GoTo /D (subsection.12.1) >> endobj 364 0 obj (12.1 Changing Representations) endobj 365 0 obj << /S /GoTo /D (subsection.12.2) >> endobj 368 0 obj (12.2 Errors) endobj 369 0 obj << /S /GoTo /D (subsection.12.3) >> endobj 372 0 obj (12.3 Changing Meaning) endobj 373 0 obj << /S /GoTo /D (subsection.12.4) >> endobj 376 0 obj (12.4 One More Example) endobj 377 0 obj << /S /GoTo /D (section.13) >> endobj 380 0 obj (13 Desugaring as a Language Feature) endobj 381 0 obj << /S /GoTo /D (subsection.13.1) >> endobj 384 0 obj (13.1 A First Example) endobj 385 0 obj << /S /GoTo /D (subsection.13.2) >> endobj 388 0 obj (13.2 Syntax Transformers as Functions) endobj 389 0 obj << /S /GoTo /D (subsection.13.3) >> endobj 392 0 obj (13.3 Guards) endobj 393 0 obj << /S /GoTo /D (subsection.13.4) >> endobj 396 0 obj (13.4 Or: A Simple Macro with Many Features) endobj 397 0 obj << /S /GoTo /D (subsubsection.13.4.1) >> endobj 400 0 obj (13.4.1 A First Attempt) endobj 401 0 obj << /S /GoTo /D (subsubsection.13.4.2) >> endobj 404 0 obj (13.4.2 Guarding Evaluation) endobj 405 0 obj << /S /GoTo /D (subsubsection.13.4.3) >> endobj 408 0 obj (13.4.3 Hygiene) endobj 409 0 obj << /S /GoTo /D (subsection.13.5) >> endobj 412 0 obj (13.5 Identifier Capture) endobj 413 0 obj << /S /GoTo /D (subsection.13.6) >> endobj 416 0 obj (13.6 Influence on Compiler Design) endobj 417 0 obj << /S /GoTo /D (subsection.13.7) >> endobj 420 0 obj (13.7 Desugaring in Other Languages) endobj 421 0 obj << /S /GoTo /D (section.14) >> endobj 424 0 obj (14 Control Operations) endobj 425 0 obj << /S /GoTo /D (subsection.14.1) >> endobj 428 0 obj (14.1 Control on the Web) endobj 429 0 obj << /S /GoTo /D (subsubsection.14.1.1) >> endobj 432 0 obj (14.1.1 Program Decomposition into Now and Later) endobj 433 0 obj << /S /GoTo /D (subsubsection.14.1.2) >> endobj 436 0 obj (14.1.2 A Partial Solution) endobj 437 0 obj << /S /GoTo /D (subsubsection.14.1.3) >> endobj 440 0 obj (14.1.3 Achieving Statelessness) endobj 441 0 obj << /S /GoTo /D (subsubsection.14.1.4) >> endobj 444 0 obj (14.1.4 Interaction with State) endobj 445 0 obj << /S /GoTo /D (subsection.14.2) >> endobj 448 0 obj (14.2 Continuation-Passing Style) endobj 449 0 obj << /S /GoTo /D (subsubsection.14.2.1) >> endobj 452 0 obj (14.2.1 Implementation by Desugaring) endobj 453 0 obj << /S /GoTo /D (subsubsection.14.2.2) >> endobj 456 0 obj (14.2.2 Converting the Example) endobj 457 0 obj << /S /GoTo /D (subsubsection.14.2.3) >> endobj 460 0 obj (14.2.3 Implementation in the Core) endobj 461 0 obj << /S /GoTo /D (subsection.14.3) >> endobj 464 0 obj (14.3 Generators) endobj 465 0 obj << /S /GoTo /D (subsubsection.14.3.1) >> endobj 468 0 obj (14.3.1 Design Variations) endobj 469 0 obj << /S /GoTo /D (subsubsection.14.3.2) >> endobj 472 0 obj (14.3.2 Implementing Generators) endobj 473 0 obj << /S /GoTo /D (subsection.14.4) >> endobj 476 0 obj (14.4 Continuations and Stacks) endobj 477 0 obj << /S /GoTo /D (subsection.14.5) >> endobj 480 0 obj (14.5 Tail Calls) endobj 481 0 obj << /S /GoTo /D (subsection.14.6) >> endobj 484 0 obj (14.6 Continuations as a Language Feature) endobj 485 0 obj << /S /GoTo /D (subsubsection.14.6.1) >> endobj 488 0 obj (14.6.1 Presentation in the Language) endobj 489 0 obj << /S /GoTo /D (subsubsection.14.6.2) >> endobj 492 0 obj (14.6.2 Defining Generators) endobj 493 0 obj << /S /GoTo /D (subsubsection.14.6.3) >> endobj 496 0 obj (14.6.3 Defining Threads) endobj 497 0 obj << /S /GoTo /D (subsubsection.14.6.4) >> endobj 500 0 obj (14.6.4 Better Primitives for Web Programming) endobj 501 0 obj << /S /GoTo /D (section.15) >> endobj 504 0 obj (15 Checking Program Invariants Statically: Types) endobj 505 0 obj << /S /GoTo /D (subsection.15.1) >> endobj 508 0 obj (15.1 Types as Static Disciplines) endobj 509 0 obj << /S /GoTo /D (subsection.15.2) >> endobj 512 0 obj (15.2 A Classical View of Types) endobj 513 0 obj << /S /GoTo /D (subsubsection.15.2.1) >> endobj 516 0 obj (15.2.1 A Simple Type Checker) endobj 517 0 obj << /S /GoTo /D (subsubsection.15.2.2) >> endobj 520 0 obj (15.2.2 Type-Checking Conditionals) endobj 521 0 obj << /S /GoTo /D (subsubsection.15.2.3) >> endobj 524 0 obj (15.2.3 Recursion in Code) endobj 525 0 obj << /S /GoTo /D (subsubsection.15.2.4) >> endobj 528 0 obj (15.2.4 Recursion in Data) endobj 529 0 obj << /S /GoTo /D (subsubsection.15.2.5) >> endobj 532 0 obj (15.2.5 Types, Time, and Space) endobj 533 0 obj << /S /GoTo /D (subsubsection.15.2.6) >> endobj 536 0 obj (15.2.6 Types and Mutation) endobj 537 0 obj << /S /GoTo /D (subsubsection.15.2.7) >> endobj 540 0 obj (15.2.7 The Central Theorem: Type Soundness) endobj 541 0 obj << /S /GoTo /D (subsection.15.3) >> endobj 544 0 obj (15.3 Extensions to the Core) endobj 545 0 obj << /S /GoTo /D (subsubsection.15.3.1) >> endobj 548 0 obj (15.3.1 Explicit Parametric Polymorphism) endobj 549 0 obj << /S /GoTo /D (subsubsection.15.3.2) >> endobj 552 0 obj (15.3.2 Type Inference) endobj 553 0 obj << /S /GoTo /D (subsubsection.15.3.3) >> endobj 556 0 obj (15.3.3 Union Types) endobj 557 0 obj << /S /GoTo /D (subsubsection.15.3.4) >> endobj 560 0 obj (15.3.4 Nominal Versus Structural Systems) endobj 561 0 obj << /S /GoTo /D (subsubsection.15.3.5) >> endobj 564 0 obj (15.3.5 Intersection Types) endobj 565 0 obj << /S /GoTo /D (subsubsection.15.3.6) >> endobj 568 0 obj (15.3.6 Recursive Types) endobj 569 0 obj << /S /GoTo /D (subsubsection.15.3.7) >> endobj 572 0 obj (15.3.7 Subtyping) endobj 573 0 obj << /S /GoTo /D (subsubsection.15.3.8) >> endobj 576 0 obj (15.3.8 Object Types) endobj 577 0 obj << /S /GoTo /D (section.16) >> endobj 580 0 obj (16 Checking Program Invariants Dynamically: Contracts) endobj 581 0 obj << /S /GoTo /D (subsection.16.1) >> endobj 584 0 obj (16.1 Contracts as Predicates) endobj 585 0 obj << /S /GoTo /D (subsection.16.2) >> endobj 588 0 obj (16.2 Tags, Types, and Observations on Values) endobj 589 0 obj << /S /GoTo /D (subsection.16.3) >> endobj 592 0 obj (16.3 Higher-Order Contracts) endobj 593 0 obj << /S /GoTo /D (subsection.16.4) >> endobj 596 0 obj (16.4 Syntactic Convenience) endobj 597 0 obj << /S /GoTo /D (subsection.16.5) >> endobj 600 0 obj (16.5 Extending to Compound Data Structures) endobj 601 0 obj << /S /GoTo /D (subsection.16.6) >> endobj 604 0 obj (16.6 More on Contracts and Observations) endobj 605 0 obj << /S /GoTo /D (subsection.16.7) >> endobj 608 0 obj (16.7 Contracts and Mutation) endobj 609 0 obj << /S /GoTo /D (subsection.16.8) >> endobj 612 0 obj (16.8 Combining Contracts) endobj 613 0 obj << /S /GoTo /D (subsection.16.9) >> endobj 616 0 obj (16.9 Blame) endobj 617 0 obj << /S /GoTo /D (section.17) >> endobj 620 0 obj (17 Alternate Application Semantics) endobj 621 0 obj << /S /GoTo /D (subsection.17.1) >> endobj 624 0 obj (17.1 Lazy Application) endobj 625 0 obj << /S /GoTo /D (subsubsection.17.1.1) >> endobj 628 0 obj (17.1.1 A Lazy Application Example) endobj 629 0 obj << /S /GoTo /D (subsubsection.17.1.2) >> endobj 632 0 obj (17.1.2 What Are Values?) endobj 633 0 obj << /S /GoTo /D (subsubsection.17.1.3) >> endobj 636 0 obj (17.1.3 What Causes Evaluation?) endobj 637 0 obj << /S /GoTo /D (subsubsection.17.1.4) >> endobj 640 0 obj (17.1.4 An Interpreter) endobj 641 0 obj << /S /GoTo /D (subsubsection.17.1.5) >> endobj 644 0 obj (17.1.5 Laziness and Mutation) endobj 645 0 obj << /S /GoTo /D (subsubsection.17.1.6) >> endobj 648 0 obj (17.1.6 Caching Computation) endobj 649 0 obj << /S /GoTo /D (subsection.17.2) >> endobj 652 0 obj (17.2 Reactive Application) endobj 653 0 obj << /S /GoTo /D (subsubsection.17.2.1) >> endobj 656 0 obj (17.2.1 Motivating Example: A Timer) endobj 657 0 obj << /S /GoTo /D (subsubsection.17.2.2) >> endobj 660 0 obj (17.2.2 Callback Types are Four-Letter Words) endobj 661 0 obj << /S /GoTo /D (subsubsection.17.2.3) >> endobj 664 0 obj (17.2.3 The Alternative: Reactive Languages) endobj 665 0 obj << /S /GoTo /D (subsubsection.17.2.4) >> endobj 668 0 obj (17.2.4 Implementing Transparent Reactivity) endobj 669 0 obj << /S /GoTo /D [670 0 R /Fit] >> endobj 672 0 obj << /Length 264 /Filter /FlateDecode >> stream xuMK09`L47U@-^C6`Ӓv .%
lH(i`يNQU@&M<#vMPok
endstream
endobj
670 0 obj <<
/Type /Page
/Contents 672 0 R
/Resources 671 0 R
/MediaBox [0 0 612 792]
/Parent 676 0 R
>> endobj
673 0 obj <<
/D [670 0 R /XYZ 132.768 705.06 null]
>> endobj
674 0 obj <<
/D [670 0 R /XYZ 133.768 667.198 null]
>> endobj
671 0 obj <<
/Font << /F35 675 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
718 0 obj <<
/Length 1251
/Filter /FlateDecode
>>
stream
x[oF)SAZ(sTm74njl