序言

程序设计语言是每一位计算机科学家必须掌握的核心技术之一,背后的原因很简单:因为程序设计语言是我们用来开发产品和交流新想法的主要方式。数百万行的程序构造了信息时代,影响了计算机领域。程序的成功归功于计算机科学界在创造和实现新语言方面的长期努力。Michael Scott在这本书的脚注和参考文献中提到了大量计算机科学家,这清楚地表明了这项工作的规模,以及它所包含的主题的多样性。

本书讨论了75种以上的程序设计语言,无论在时间上、范式中和应用程序领域内,它们都是语言设计中最有影响力的代表,是几十年工作的结晶:最初在20世纪50年代产生了Fortran和Lisp,随后产生了许多语言,在我们这个时代,还产生了用于Web编程的动态语言。这些语言包含命令式、函数式、逻辑式、静态、动态、顺序式、基于共享内存的并行、基于分布式内存的并行、数据流、高级和中间语言,还包括用于科学计算、符号操作和数据库访问的语言。程序设计语言的多样性对程序员的生产力至关重要,也是计算学科的重要内容之一。

本书以各种语言为基础,详细讨论了控制流、类型和抽象机制。这些是开发结构良好、模块化、易于理解和维护的程序基础。了解这些核心特性及其在当今语言中的体现,是成为一名高效程序员和更好地理解当今计算机科学的基础。

程序设计语言的实现和设计必须一起研究,其中一个原因是语言的成功与否取决于其实现的质量。此外,语言的实现有时会限制语言的设计。语言的实现从解析和词法扫描开始,这是计算程序语法结构所要求的。如本书第1部分所述,当今的解析技术,是迄今为止发明的最美丽的算法之一,也是使用数学理论创造实用工具的一个很好的例子。解析策略值得学习,也具有很大的实用价值。要理解这些策略的伟大之处,一个方法就是学习第一个Fortran编译器,研究构建该编译器的先驱们是如何实现操作符优先级的,这是一个非常巧妙地策略。

实现程序设计语言的另一个组件是编译器,它们负责把语言的高级表示转换到适合由物理机或虚拟机执行的低级形式。翻译可以提前完成,也可以在执行过程中完成,或者兼而有之。这本书讨论了这些方法和实现策略,包括解析驱动的翻译机制。为了生成高效的代码,翻译程序使用了各种策略来避免冗余计算,也利用了存储的层次结构和处理器的并行性。这些有时相互冲突的目标是由编译器的优化组件实现的。虽然这个内容通常不在编译器入门课程的教学范围之内,但本书的第4部分很好地介绍了程序优化相关内容。

近年来,计算机领域的一个重要发展方向是并行计算。在可预见的未来内,计算性能的提高将主要来源于并行性的有效利用。本书回顾了这一发展过程,向读者介绍了并发编程的一系列主题,包括线程同步、通信和协调机制。随着并行变为常规计算的一部分,这些内容将变得越来越重要。

程序设计语言是程序员和机器之间的桥梁,因为算法必须通过程序设计语言才可以执行。研究程序设计语言的设计和实现需要了解各方面的计算策略,因此具有很大的教学价值。Michael Scott的《程序设计语言——实践之路》对这一主题进行了广泛的论述,这是一个伟大的贡献,对于计算机科学家也是宝贵信息来源。

David Padua

Siebel Center for Computer Science

University of Illinois at Urbana-Champaign

results matching ""

    No results matching ""