新闻资讯
看你所看,想你所想

程序设计语言概念

《程序设计语来自言概念》是2005年清华大学出版社出版的图书,作者是John C.Mitchell。

《程序设计语言概念》为程序员写出一个好的程序提供了所需的抽象机制、组织原则以及控制结构。本书所介绍的是在程序设计语言中出现的概念,即在程序设计语言的实现过程中产生的问题,以及语言的设计方式对程序开发产生的影响。

  • 书名 程序设计语言概念
  • 作者 John C.Mitchell
  • 译者 冯建华、王益
  • 出版社 清华大学出版社
  • 出版时间 2005年10月

前言

  最好的程序设计语言就是编程思考中的概念上的世界。

  --AlanPerlis,NATO软件工程技术会议,罗马,1969

结构

内容简介

  本书分为4个部分:

  第1部分:函数与基本原理

  第2部分:过程、类型、内存严负管理与控制

  第3部分:模块、抽象与面向对来自象程序设计

  第4部分:并发性与逻辑编程

略述

  第1部分将Lisp作为分析程序斤拉抗类论今和举货设计语言的示例,对其进行了简单介绍,内容包括编译器结构、解析、朗母达演算以及指称语义。可计算性一章还涉及了编译时程序分析和优化的限制。

  田践挥查防交第2部分通过过程化的Algol系列语言和ML,介绍了类型、内存管理和控制结构。

  第3部分介绍使用抽象数据类型、模块和对象来组织程序。由于目前面向对象编程广受推崇,于是我们对几种面向对象语言进行了对比。有专门的章节对Simula360百科、Smalltalk、C++和Java进行研究和比较

  第4部分介绍因前了支持并发性的语言机制和逻辑编程。

读者群体

  本书面向的读者是有一定编程基础的大学本二玉鱼法概尼青田紧科高年级学生和研究生新生。他们理解C或其他过程化语言,熟悉C++或者其他面向复下对象的程序设计语言来自。如果读者具备一些Lisp、S层量源吸一且燃值秋神息cheme或者ML的经验将会对第1部分和第2部分的理解有所帮助,360百科但不具备这些背景知识也同样能学好这门课程。对算法和数据结构进行简单分析的经验也对理解本书有所帮助。例如,在比较某种构造的实现方式的时候,如果能够区分常数时间复杂性、多项式时间复杂性和指数时间复杂性将有助于理解

本书作用

  在学习了本书之后,读者将会对过去40年中所使用过的各种程序设计语言有更好的理解,对程序设计语言的设计过程中出现的问题和折衷有更深的认识,也会对所使用的程序设计语言的利弊有更透彻的了解。事景帝磁架被期支胶距由于不同的语言体现了不同的编程概念,把其他语言中的思想引入到自己所编写的程序中将会提高找秋读者的编程能力。

致谢

  这本书的手稿源于我从1993年开始开设的一门程序设计语言课程(Standford CS 242)的笔记。每年都有精力充沛的助教帮助我调试课程的示例程序,设计课程作业和准备解决方案模型。该课程的组织企命现交例片派乎和内容都受益于他们的建议。特别感谢Ka获三修约末杆棉题标头次thleen Fisher,他在1993年和1994年担任助教,并于19皇草重岩道技没于距却应95年我不在校的时候教授课程。Kanthleen早些年帮我组织材料,并在事合目技吗喜每布1995年将我的手稿含袁车考何头处转录成在线文档。感谢Amit Patel主动组织布置作业和解决方案,感谢Vitaly Shmatikov对程序设计语言术语表做出永座凯能器的不懈努力。Anne Bracy、Dan Bentley刑期果模妒短走永和Stephen Freund仔细地校对了许多章节。

  剑桥大学出版社的Lauren Cowles、Alan 结似笑必Harvey和David Tranah给予我支持和帮助。我要特别感谢Lauren对草稿的所有12章都仔细阅读并详细做注。同时也要感谢他们邀请的校阅者,他们对本书的早期版本提出了很多宝贵的建议。Zena Ariola从本书的初稿开始就连续几年在俄勒冈州大学教授此书,并提出了很多很好的建议;还有很多其他讲师也提供了很多建议。

  最后,特别感谢Kr失总回zystof Apt对"逻辑编程"一章做出的贡献。

  John 充情班好穿封C. Mitchell

目录

  第1部分 函数与基本原理

  第1章 导言 2

  1.1 程序设计语言 2

  1.2 目标 3

  1.2.1 总体目标 3

  1.2.2 特殊主题 3

  1.3 程序设计语言的历史 4

  1.4 组织:概念和语言 5

  第2章 可计算性 7

  2.1 部分函数与可计算性 7

  2.1.1 表达式、错误和非终止符 7

  2.1.2 部分函数 8

  2.1.3 可计算性 9

  2.2 本章小结 11

  习题 11

  第3章 Lisp语言:函数、递归和列表 13

  3.1 Lisp语言的历史 13

  3.2 好的语言设计 13

  3.3 语言简述 15

  3.4 Lisp设计中的创新 18

  3.4.1 语句和表达式 18

  3.4.2 条件表达式 19

  3.4.3 Lisp抽象机 20

  3.4.4 把程序作为数据 23

  3.4.5 函数表达式 24

  3.4.6 递归 25

  3.4.7 高阶函数 25

  3.4.8 垃圾收集 26

  3.4.9 纯Lisp与副作用 29

  3.5 本章小结 30

  习题 30

  第4章 基本原理 38

  4.1 编译器和语法 38

  4.1.1 一个简单编译器的结构 38

  4.1.2 文法和解析树 41

  4.1.3 解析和优先级 43

  4.2 朗母达演算 44

  4.2.1 函数和函数表达式 44

  4.2.2 朗母达表达式 45

  4.2.3 朗母达演算编程 49

  4.2.4 归约、汇合和范式 51

  4.2.5 朗母达演算的重要特征 52

  4.3 指称语义 52

  4.3.1 目标语言和元语言 53

  4.3.2 二进制数的指称语义 54

  4.3.3 While程序的指称语义 55

  4.3.4 透视和非标准语义 58

  4.4 函数型语言和命令型语言 60

  4.4.1 命令语句和声明语句 60

  4.4.2 功能型程序和命令型程序 61

  4.5 本章小结 65

  习题 66

  第2部分 过程、类型、内存管理与控制

  第5章 Algol与ML语言 74

  5.1 Algol家族的程序语言 74

  5.1.1 Algol 60 74

  5.1.2 Algol 68 76

  5.1.3 Pascal 77

  5.1.4 Modula 78

  5.2 C语言的发展 78

  5.3 LCF系统和ML 80

  5.4 ML程序设计语言 82

  5.4.1 交互会话和运行时环境 82

  5.4.2 基本类型和类型构造器 85

  5.4.3 模式、声明、函数表达式 89

  5.4.4 ML数据类型的声明 92

  5.4.5 ML的引用单元与赋值 94

  5.4.6 ML小结 97

  5.5 本章小结 98

  习题 98

  第6章 类型系统和类型推测 105

  6.1 程序设计中的类型 105

  6.1.1 程序的组织和文档 105

  6.1.2 类型错误 106

  6.1.3 类型与优化 107

  6.2 类型安全和类型检查 108

  6.2.1 类型安全 108

  6.2.2 编译时和运行时的类型检查 108

  6.3 类型推测 110

  6.3.1 第一个类型推测的示例 110

  6.3.2 类型推测算法 111

  6.4 多态和重载 118

  6.4.1 参数多态 118

  6.4.2 参数多态的实现 120

  6.4.3 重载 122

  6.5 类型声明和类型等价性 123

  6.5.1 透明的类型声明 123

  6.5.2 C语言的声明和结构 124

  6.5.3 ML类型声明 125

  6.6 本章小结 126

  习题 127

  第7章 作用域、函数和存储管理 133

  7.1 块结构的语言 133

  7.2 内嵌块 135

  7.2.1 活动记录和局部变量 135

  7.2.2 全局变量和控制链 138

  7.3 函数和子程序 139

  7.3.1 函数的活动记录 139

  7.3.2 参数传递 141

  7.3.3 全局变量(一阶情况) 144

  7.3.4 末端递归(一阶情况) 146

  7.4 高阶函数 148

  7.4.1 一阶函数 148

  7.4.2 将函数传递给函数 149

  7.4.3 从嵌套作用域中返回函数 152

  7.5 本章小结 154

  习题 155

  第8章 顺序语言中的控制 168

  8.1 结构化控制 168

  8.1.1 意大利面条式的代码 168

  8.1.2 结构化控制 168

  8.2 异常 169

  8.2.1 异常机制的目的 169

  8.2.2 ML异常 171

  8.2.3 C++异常 173

  8.2.4 关于异常的更多内容 175

  8.3 延续 179

  8.3.1 表示"程序其余部分"的函数 179

  8.3.2 延续传递形式和末端调用 180

  8.3.3 延续的编译 183

  8.4 函数和求值顺序 183

  8.5 本章小结 186

  习题 187

  第3部分 模块、抽象与面向对象程序设计

  第9章 数据抽象和模块化 192

  9.1 结构化程序设计 192

  9.1.1 数据细化 193

  9.1.2 模块化 194

  9.2 支持抽象机制的语言 196

  9.2.1 抽象 197

  9.2.2 抽象数据类型 198

  9.2.3 ML抽象数据类型 198

  9.2.4 表达无关性 201

  9.2.5 数据类型介绍 202

  9.3 模块 204

  9.3.1 Modula和Ada 205

  9.3.2 ML模块 207

  9.4 一般抽象 210

  9.4.1 C++函数模板 210

  9.4.2 标准的ML算符 212

  9.4.3 C++标准模板库 215

  9.5 本章小结 218

  习题 220

  第10章 面向对象语言的概念 226

  10.1 面向对象设计 226

  10.2 面向对象语言中的4个基本概念 227

  10.2.1 动态查找 227

  10.2.2 抽象 229

  10.2.3 子类型 231

  10.2.4 继承 232

  10.2.5 作为对象的闭包 233

  10.2.6 继承不是子类型 234

  10.3 编程结构 235

  10.4 设计模式 236

  10.5 本章小结 239

  10.6 展望:Simula、Smalltalk、C++、Java 239

  习题 240

  第11章 对象的历史:Simula和Smalltalk 246

  11.1 Simula面向对象机理 246

  11.1.1 对象和仿真 246

  11.1.2 Simula的主要概念 247

  11.2 Simula中的对象 247

  11.2.1 Simula中面向对象的基本特点 248

  11.2.2 一个点线圆的例子 248

  11.2.3 示例代码和对象表示 250

  11.3 Simula中的子类和继承 251

  11.3.1 对象类型和子类型 252

  11.4 Smalltalk的发展 254

  11.5 Smalltalk语言的特点 255

  11.5.1 术语 255

  11.5.2 类和对象 255

  11.5.3 继承 258

  11.5.4 Smalltalk的抽象性 260

  11.6 Smalltalk的灵活性 260

  11.6.1 动态查找和多态 260

  11.6.2 布尔变量和块 261

  11.6.3 self和super 262

  11.6.4 系统扩充:Ingalls测试 263

  11.7 子类型与继承的重要性 264

  11.7.1 对象类型作为接口 264

  11.7.2 子类型 265

  11.7.3 子类型和继承 265

  11.8 本章小结 267

  习题 268

  第12章 C++对象与运行效率 277

  12.1 设计目标和限制 277

  12.1.1 与C的兼容性 277

  12.1.2 C++的成功 278

  12.2 C++概述 278

  12.2.1 增加了C中没有的对象 279

  12.2.2 面向对象的特点 282

  12.2.3 好的决定和问题所在 282

  12.3 类、继承和虚函数 284

  12.3.1 C++类和对象 284

  12.3.2 C++派生类(继承) 285

  12.3.3 虚函数 287

  12.3.4 为什么C++的查找比Smalltalk的查找简单 288

  12.4 子类型 292

  12.4.1 子类型原理 292

  12.4.2 公有基类 293

  12.4.3 public成员的特殊类型 294

  12.4.4 抽象基类 294

  12.5 多重继承 295

  12.5.1 多重继承的实现 296

  12.5.2 命名冲突、继承和虚拟基类 298

  12.6 本章小结 301

  习题 302

  第13章 可移植性和安全性:Java语言 319

  13.1 Java语言概述 320

  13.1.1 Java语言的目标 320

  13.1.2 设计决策 320

  13.2 Java的类和继承 322

  13.2.1 类和对象 322

  13.2.2 包和可视性 325

  13.2.3 继承 325

  13.2.4 抽象类和接口 327

  13.3 Java的类型及子类型关系 328

  13.3.1 类型的分类 328

  13.3.2 类和接口的子类型关系 329

  13.3.3 数组、协变和反协变 330

  13.3.4 Java 异常类的层次关系 331

  13.3.5 子类型多态和通用编程 333

  13.4 Java系统架构 336

  13.4.1 Java虚拟机 336

  13.4.2 类加载器 337

  13.4.3 Java链接器、检验器及类型约束 337

  13.4.4 字节码解释器和方法查询 338

  13.5 安全特性 342

  13.5.1 缓冲区泄漏攻击 343

  13.5.2 Java沙箱 344

  13.5.3 安全和类型安全 346

  13.6 本章小结 347

  习题 349

  第4部分 并发性与逻辑编程

  第14章 并发和分布式编程 358

  14.1 并发的基本概念 359

  14.1.1 执行顺序和非确定性 359

  14.1.2 通信、协调和原子性 361

  14.1.3 互斥和封锁 361

  14.1.4 信号量 364

  14.1.5 管程 365

  14.2 Actor模型 366

  14.3 并发ML 369

  14.3.1 线程和通道 369

  14.3.2 选择式通信和保护命令 371

  14.3.3 一流的同步操作:事件 373

  14.4 Java的并发性 377

  14.4.1 线程、通信与同步 378

  14.4.2 同步方法 380

  14.4.3 虚拟机与存储模型 382

  14.4.4 分布式程序设计与远程方法调用 386

  14.5 本章小结 388

  习题 390

  第15章 逻辑编程范例和Prolog 396

  15.1 逻辑编程的历史 396

  15.2 逻辑编程范例的简要概述 397

  15.2.1 说明性编程 397

  15.2.2 交互编程 397

  15.3 作为原子动作统一解决的等式 398

  15.3.1 项 398

  15.3.2 置换 399

  15.3.3 最通用的合一置换 399

  15.3.4 合一算法 400

  15.4 子句作为过程声明的一部分 402

  15.4.1 简单子句 402

  15.4.2 计算过程 402

  15.4.3 子句 404

  15.5 Prolog编程 405

  15.5.1 单个程序的多重使用 405

  15.5.2 逻辑变量 406

  15.6 Prolog中的数学 409

  15.6.1 数学运算符 410

  15.6.2 数学比较关系 410

  15.6.3 对算术表达式的赋值 412

  15.7 控制、双性语法和元变量 414

  15.7.1 剪切 414

  15.7.2 双性语法和元变量 415

  15.7.3 控制设备 416

  15.7.4 失败的否定 418

  15.7.5 高阶编程和Prolog中的元编程 419

  15.8 Prolog的评价 421

  15.9 书目评价 423

  15.10 本章小结 423

  附录A 程序实例补充 425

  A.1 程序和面向对象机制 425

  A.1.1 类型的程序:典型案例版本 426

  A.1.2 shape程序:面向对象版本 430

  附录B 术语表 433

转载请注明出处累积网 » 程序设计语言概念

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com