http://cs.brown.edu/courses/cs173/2012/book/

1 Introduction

1.1 Our Philosophy

1.2 The Structure of This Book

1.3 The Language of This Book

 

2 Everything (We Will Say) About Parsing

2.1 A Lightweight, Built-In First Half of a Parser

2.2 A Convenient Shortcut

2.3 Types for Parsing

2.4 Completing the Parser

2.5 Coda

 

3 A First Look at Interpretation

3.1 Representing Arithmetic

3.2 Writing an Interpreter

3.3 Did You Notice?

3.4 Growing the Language

 

4 A First Taste of Desugaring

4.1 Extension: Binary Subtraction

4.2 Extension: Unary Negation

 

5 Adding Functions to the Language

5.1 Defining Data Representations

5.2 Growing the Interpreter

5.3 Substitution

5.4 The Interpreter, Resumed

5.5 Oh Wait, There’s More!

 

6 From Substitution to Environments

6.1 Introducing the Environment

6.2 Interpreting with Environments

6.3 Deferring Correctly

6.4 Scope

6.4.1 How Bad Is It?

6.4.2 The Top-Level Scope

6.5 Exposing the Environment

 

7 Functions Anywhere

7.1 Functions as Expressions and Values

7.2 Nested What?

7.3 Implementing Closures

7.4 Substitution, Again

7.5 Sugaring Over Anonymity

 

8 Mutation: Structures and Variables

8.1 Mutable Structures

8.1.1 A Simple Model of Mutable Structures

8.1.2 Scaffolding

8.1.3 Interaction with Closures

8.1.4 Understanding the Interpretation of Boxes

8.1.5 Can the Environment Help?

8.1.6 Introducing the Store

8.1.7 Interpreting Boxes

8.1.8 The Bigger Picture

8.2 Variables

8.2.1 Terminology

8.2.2 Syntax

8.2.3 Interpreting Variables

8.3 The Design of Stateful Language Operations

8.4 Parameter Passing

 

9 Recursion and Cycles: Procedures and Data

9.1 Recursive and Cyclic Data

9.2 Recursive Functions

9.3 Premature Observation

9.4 Without Explicit State

 

10 Objects

10.1 Objects Without Inheritance

10.1.1 Objects in the Core

10.1.2 Objects by Desugaring

10.1.3 Objects as Named Collections

10.1.4 Constructors

10.1.5 State

10.1.6 Private Members

10.1.7 Static Members

10.1.8 Objects with Self-Reference

10.1.8.1 Self-Reference Using Mutation

10.1.8.2 Self-Reference Without Mutation

10.1.9 Dynamic Dispatch

10.2 Member Access Design Space

10.3 What (Goes In) Else?

10.3.1 Classes

10.3.2 Prototypes

10.3.3 Multiple Inheritance

10.3.4 Super-Duper!

10.3.5 Mixins and Traits

 

11 Memory Management

11.1 Garbage

11.2 What is “Correct” Garbage Recovery?

11.3 Manual Reclamation

11.3.1 The Cost of Fully-Manual Reclamation

11.3.2 Reference Counting

11.4 Automated Reclamation, or Garbage Collection

11.4.1 Overview

11.4.2 Truth and Provability

11.4.3 Central Assumptions

11.5 Convervative Garbage Collection

11.6 Precise Garbage Collection

 

12 Representation Decisions

12.1 Changing Representations

12.2 Errors

12.3 Changing Meaning

12.4 One More Example

 

13 Desugaring as a Language Feature

13.1 A First Example

13.2 Syntax Transformers as Functions

13.3 Guards

13.4 Or: A Simple Macro with Many Features

13.4.1 A First Attempt

13.4.2 Guarding Evaluation

13.4.3 Hygiene

13.5 Identifier Capture

13.6 Influence on Compiler Design

13.7 Desugaring in Other Languages

 

14 Control Operations

14.1 Control on the Web

14.1.1 Program Decomposition into Now and Later

14.1.2 A Partial Solution

14.1.3 Achieving Statelessness

14.1.4 Interaction with State

14.2 Continuation-Passing Style

14.2.1 Implementation by Desugaring

14.2.2 Converting the Example

14.2.3 Implementation in the Core

14.3 Generators

14.3.1 Design Variations

14.3.2 Implementing Generators

14.4 Continuations and Stacks

14.5 Tail Calls

14.6 Continuations as a Language Feature

14.6.1 Presentation in the Language

14.6.2 Defining Generators

14.6.3 Defining Threads

14.6.4 Better Primitives for Web Programming

 

15 Checking Program Invariants Statically: Types

15.1 Types as Static Disciplines

15.2 A Classical View of Types

15.2.1 A Simple Type Checker

15.2.2 Type-Checking Conditionals

15.2.3 Recursion in Code

15.2.3.1 A First Attempt at Typing Recursion

15.2.3.2 Program Termination

15.2.3.3 Typing Recursion

15.2.4 Recursion in Data

15.2.4.1 Recursive Datatype Definitions

15.2.4.2 Introduced Types

15.2.4.3 Pattern-Matching and Desugaring

15.2.5 Types, Time, and Space

15.2.6 Types and Mutation

15.2.7 The Central Theorem: Type Soundness

15.3 Extensions to the Core

15.3.1 Explicit Parametric Polymorphism

15.3.1.1 Parameterized Types

15.3.1.2 Making Parameters Explicit

15.3.1.3 Rank-1 Polymorphism

15.3.1.4 Interpreting Rank-1 Polymorphism as Desugaring

15.3.1.5 Alternate Implementations

15.3.1.6 Relational Parametricity

15.3.2 Type Inference

15.3.2.1 Constraint Generation

15.3.2.2 Constraint Solving Using Unification

15.3.2.3 Let-Polymorphism

15.3.3 Union Types

15.3.3.1 Structures as Types

15.3.3.2 Untagged Unions

15.3.3.3 Discriminating Untagged Unions

15.3.3.4 Retrofitting Types

15.3.3.5 Design Choices

15.3.4 Nominal Versus Structural Systems

15.3.5 Intersection Types

15.3.6 Recursive Types

15.3.7 Subtyping

15.3.7.1 Unions

15.3.7.2 Intersections

15.3.7.3 Functions

15.3.7.4 Implementing Subtyping

15.3.8 Object Types

 

16 Checking Program Invariants Dynamically: Contracts

16.1 Contracts as Predicates

16.2 Tags, Types, and Observations on Values

16.3 Higher-Order Contracts

16.4 Syntactic Convenience

16.5 Extending to Compound Data Structures

16.6 More on Contracts and Observations

16.7 Contracts and Mutation

16.8 Combining Contracts

16.9 Blame

 

17 Alternate Application Semantics

17.1 Lazy Application

17.1.1 A Lazy Application Example

17.1.2 What Are Values?

17.1.3 What Causes Evaluation?

17.1.4 An Interpreter

17.1.5 Laziness and Mutation

17.1.6 Caching Computation

17.2 Reactive Application

17.2.1 Motivating Example: A Timer

17.2.2 Callback Types are Four-Letter Words

17.2.3 The Alternative: Reactive Languages

17.2.4 Implementing Transparent Reactivity

17.2.4.1 Dataflow Graph Construction

17.2.4.2 Dataflow Graph Update

17.2.4.3 Evaluation Order

Programming Languages: Application and Interpretation的更多相关文章

  1. Coursera课程 Programming Languages, Part A 总结

    Coursera CSE341: Programming Languages 感谢华盛顿大学 Dan Grossman 老师 以及 Coursera . 碎言碎语 这只是 Programming La ...

  2. Coursera课程 Programming Languages, Part B 总结

    Programming Languages, Part A Programming Languages, Part B Part A 笔记 碎言碎语 很多没有写过 Lisp 程序的人都会对 Lisp ...

  3. Hex Dump In Many Programming Languages

    Hex Dump In Many Programming Languages See also: ArraySumInManyProgrammingLanguages, CounterInManyPr ...

  4. ESSENTIALS OF PROGRAMMING LANGUAGES (THIRD EDITION) :编程语言的本质 —— (一)

    # Foreword> # 序 This book brings you face-to-face with the most fundamental idea in computer prog ...

  5. Comparison of programming languages

    The following table compares general and technical information for a selection of commonly used prog ...

  6. Natural language style method declaration and usages in programming languages

    More descriptive way to declare and use a method in programming languages At present, in most progra ...

  7. The future of programming languages

    In this video from JAOO Aarhus 2008 Anders Hejlsberg takes a look at the future of programming langu ...

  8. Coursera课程 Programming Languages 总结

    课程 Programming Languages, Part A Programming Languages, Part B Programming Languages, Part C CSE341: ...

  9. The history of programming languages.(transshipment) + Personal understanding and prediction

    To finish this week's homework that introduce the history of programming languages , I surf the inte ...

随机推荐

  1. “System.Runtime.InteropServices.COMException (0x80070422): 无法启动服务”解决方法

    应用程序中发生了无法处理的异常.如果单击“退出”,应用程序将立即关闭.无法启动服务,原因可能是已被禁用或其相关联设备没有启动.(异常来自HRESULT:0X80070422).点击详细内容:有关调用实 ...

  2. MySQL测试工具之-tpcc

    首先安装tpcc 官网地址:https://github.com/Percona-Lab/tpcc-mysql [root@test3 src]# unzip tpcc-mysql-master.zi ...

  3. jQuery:$(document).ready()用法

    jQuery:$(document).ready()用法 $(document).ready() 方法允许我们在文档完全加载完后执行函数;

  4. PhpStorm提高效率的使用方法及设置(快捷键)

    原文链接:https://my.oschina.net/chunto/blog/262954 快捷键: CTRL + D  复制当前行到下一行 或 复制选中内容到选中内容之后 CTRL + Y  删除 ...

  5. Xilinx Uboot网卡驱动分析

    1.MAC控制器.网卡.PHY.MDIO.mii.gmii.rgmii概念扫盲 网卡在功能上包含OSI模型的两个层,数据链路层和物理层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准 ...

  6. 漏洞利用之Metasploit使用过程

    漏洞利用之Metasploit使用过程 先扫描端口,看开放的服务,如开放ftp,版本是vsftpd 2.3.4:使用search搜索vsftp查看是否在相应的漏洞利用exploit,输入search ...

  7. js urlencode

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 这些HTML、CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML、CSS、盒子模型、内容布局)

    这些HTML.CSS知识点,面试和平时开发都需要 No1-No4   系列知识点汇总 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) ...

  9. Mongo Plugin插件(编辑器PyCharm的Mongo插件安装与使用)

    博主接触到MongoDB数据库.用普通的Navicat工具 是不支持的 正准备重新安装一款对应的可视化工具.刚好发现在PyCharm编辑中有连接mongoDB数据的插件 Mongo Plugin 这里 ...

  10. 记录下返回list给前端 遇到 $ref":"$.data.*** 问题

    1.通过对象返回给前端,对象里面有三个list 2.一个父list 2个子list  子list中的对象 是通过for循环父list按照某个条件放进去的 3.直接放进去会出现 $ref":& ...