正如我们在第一章中指出,传统上,编程语言是简单划分为了命令家族和声明家族。我们在第一部分和第二部分已经讨论了每个家族的重要问题。同时我们涵盖的主题还包括,句法,语义,命名,类型,抽象。前面我们太多集中于主流命令语言上,第三部分让我们偏离一下。
函数式和逻辑型语言是重要的非命令语言选择。我们在第11章和12章讨论。在每种情况,我们围绕代表性语言进行讨论:Scheme OCaml 是典型的函数式语言,Prolog 是典型的逻辑型语言。在第11章我们还涉及到提前还是懒惰计算,以及函数作为第一公民,高阶函数。在12章我们涉及使全自动化通用逻辑编写困难的问题,并描述实际使用中模型的限制。两章中可选部分都需要数学基础:Lambda Calculus for functional language, Predicate Calculus for logic programming.
剩下的两章讨论并发和脚本模型,这两个模型正变得越来越流行,并且是跨范式的。并发是由网络计算机的硬件并行以及多线程处理器和片上多核心驱动的。脚本是由万维网的增长以及开发者对开发效率(开发效率比运行效率更重要)的重视驱动的。
第13章由并发的基础概念开始,包括通信,同步,线程创建语法,线程实现。还分别讨论了内存共享模型:线程可以显式或者隐式通过管理同一个值来同步,以及消息通信模型:线程只能通过消息进行同步。
第14章前半段讨论脚本语言扮演的重要的角色:shell 语言,文本处理,报告生成,统计,程序的“粘合”,复杂程序的扩展,web 客户端服务端脚本。后半部分讨论一些更重要的脚本语言创新:flexible scoping,nameing conventions, string and pattern manipulation(extended regular expressions) and high level data types.