有关编程语言语义的书籍


31

我一直在阅读Nielson&Nielson的“ 应用程序语义学 ”,我真的很喜欢这个主题。我想再写一本关于编程语言语义的书-但我确实只能读一本书。

看了一看Turbak / Gifford的书,但是书太长了。我以为Winskel会没事的,但是我无法使用它(它不在我们的大学图书馆中,而且我缺钱),而且我甚至不确定它是否过时。Slonneger看起来还可以,但是实际部分使它有些长,我对他的风格不太满意。

所以我的问题是- 温斯克尔是一本好书吗?而且过时了吗?

此外,是否还有其他有关此主题的简明书籍?


5
添加了指向所有书籍的出版商页面的链接。可能对寻求浏览的其他人有用。
Suresh Venkat 2010年

2
您对哪种语义感兴趣?指称的?操作?概述?
Ohad Kammar

@Ohad Kammar:我对两者都感兴趣。
杰伊,2010年

Answers:


31

这一切都取决于您想走多远,以及您已经知道多少。对于初学者来说,Winksel的书确实很棒,但是是的,它并没有像大约20年前所写的那样向您介绍语义的最新技术。尽管如此,它仍然是该主题的很好的入门介绍。还可能值得指出的是,T。Nipkow已经将Winskel的书中的很大一部分形式化为Isabelle / HOL,请参见此处。因此,如果您想学习使用交互式校对助手,同时了解编程语言的语义,则可以借鉴许多连贯的材料。

其他更高级的书籍是:

  • Gunter,《编程语言的语义学》,一本更高级的书,侧重于指称语义学,一种语义学的方法,没有达到期望。专注于纯功能语言而忽略并发。这是我从大学时代就学到的语义学的书,回想起来,我希望我改用Winksel的书。对于初学者来说,Gunter并不容易阅读。

  • Amadio和Curien的领域和lambda计算。另一本书虽然讨论了过程计算,但更多地以领域理论的传统写作。

  • 上面已经提到过约翰·米切尔(John Mitchell)的书。它们也主要涉及顺序计算。

诸如Pierce的TAPL之类的书非常好,但仅着重于编程语言的一个方面,即类型,这一点同样重要。我不建议您将它作为编程语言一般领域的第一篇入门文章,但是任何想学习类型的人都必须阅读。

说实话,我认为目前还没有关于语言语义学的最新入门书来反映过去十年所取得的巨大进展,它从决定性方法和顺序计算向并发性(过程计算和游戏语义学)的决定性转变。 ,公理学语义以及在验证中使用交互式证明助手。

2014年4月22日更新: Tobias Nipkow和Gerwin Klein出版了一本新书

可以看作是“伊莎贝尔(Isabelle / HOL)的Winskel”。它是对编程语言(主要是操作语言和公理语言)的语义的介绍,但与以前的基于笔和纸的方法不同,这本书用Isabelle / HOL表示了所有数学知识。换句话说,它同时是一本有关定理证明的书。

这本书是全新的,所以我还没有用于教学,但是它看起来真的很适合作为比 Pierce等人的Software Foundations更低层次的介绍。


2
否定方法有什么转变吗?在我看来,更像是以前会使用手工波浪样张的那种人,如今预计会产生正式样张。由于定名方法仍然不能轻松地为我们所做的一切建模,并且需要更多的先决条件,因此这些研究人员使用了更易接近的方法,例如游戏,过程计算,证明助手。我不确定指称方法是否有所减少。
Ohad Kammar 2010年

4
请不要将指称语义与领域理论混淆。游戏语义可以并且通常是完美的称谓,即程序的含义是其各个部分含义的函数。
Andrej Bauer 2010年

2
我打开了有关此评论的新主题。但是,即使我不确定我是否同意您的定义,游戏语义本质上也是指称的。我认为我应该在我的评论中将“游戏”替换为“操作语义”,并将游戏语义作为可能的另一种指称语义研究形式。cstheory.stackexchange.com/questions/3577/...
辖Kammar

1
我不相信会有转变。根据Andrej的评论,请参阅我的第一条评论。
Ohad Kammar

1
有换班吗?一个有趣的问题。我们如何衡量转变?我们可以应用许多标准,从相对具体的标准(例如为不同方法提供的研究拨款)到模糊的概念(如思想共享)。鉴于我们作为研究人员,员工,作为拨款申请者的参与程度是这个问题的结果,我们不太可能就答案达成共识。
Martin Berger 2010年

20

这是可在线免费获得的随机材料样本:

  • Winskel,《编程语言的形式语义学》Google图书预览。我对这本书一无所知。之所以在列表上,是因为该问题专门询问了其内容,该内容主要是在线的。
  • 摩根,从规范编程的PS文件列表。主题是精炼,这是从高级非可执行描述开始,然后系统地转换为可执行文件的过程。当然,每个优化步骤都必须保留语义,因此它也讨论了某种类型的语义(主要基于谓词变形者)。
  • Harper,《编程语言的实践基础》pdf草案。请参阅下面的Dave Clarke评论。
  • Remy,《使用,理解和理解OCaml语言》pdf。这是从中我学到了函数式编程(OCaml的,更精确),我喜欢它的书很多。它以一种非常好的方式呈现了基本语言特征的语义,并且在此过程中以“需要知道”为基础呈现了lambda演算和类型理论。
  • Peyton Jones,《函数式编程语言的实现》djvu。第一章介绍lambda演算(及其“操作语义”),以及如何将高级语言功能分解为lambda演算。从这个意义上讲,本文给出了功能语言的操作语义。
  • Pierce(ed),“ 类型和编程语言的高级主题”,“ Google图书”预览
  • Slonneger,语法和编程语言的语义pdf文件列表。很久以前,我简短地看了一下,却不太喜欢。它在列表中,因为它在问题中被提及。
  • Brookes,并行分离逻辑的语义学pdf。这是一篇大文章(共80页),而不是一本书。我将其包括在内是因为这是我发现很有趣的最新进展。

1
链接很多:)
Suresh Venkat 2010年

3
如果将其作为列表显示,则将更为有用。无论如何,我还是推荐哈珀的书:单击“可能”。
Dave Clarke 2010年

我同意。Radu,您能列出书籍吗,所以我们知道我们要点击什么?这将是极好的资源。
Suresh Venkat 2010年

现在是清单。(第一个版本被张贴凌晨2点左右,睡5小时左右,前一天晚上后:P)
拉杜格里戈里

16

我将有关编程语言语义的书籍分为两类:着重于编程语言概念进行建模的书籍和着重于语义的基础方面的书籍。没有理由一本书不能同时做到。但是,通常,您只能在书中放很多东西,并且作者对于重要的东西也有自己的倾向。

温斯克尔的书已经提到了这两个方面。而且,这是一本很好的初学者的书。一本同样好的甚至更好的书是我开始的那本书:戈登对编程语言描述。这是我的第一本关于语义的书,在完成本科工作后不久便阅读。我不得不说,它为我在语义学上打下了坚实的基础,我从来没有想过,指称语义学与操作语义学或公理语义学有何不同。本书将始终是我对指称语义学的最爱。

其他着重于建模方面而不是基础方面的书籍如下:

  • Tennent的《编程语言语义学》,这是一本有关命令式编程语言的语义学的最新书籍。很容易阅读。但是,在本书的后续部分中,它往往是抽象的,您可能必须努力了解为什么要以特定的方式完成事情。

  • 雷诺兹的编程语言理论。专门研究语义的任何人都应该阅读这本书。毕竟是雷诺兹。(David Schmidt曾经对我说过:“即使Reynolds向您朗读早报,您还是要仔细听,因为您可能会学到一些重要的东西!”)它很好地涵盖了建模方面和基础方面。

关于基础方面的最好的书籍是Gunter的(我认为是研究生课本)和Mitchell的(这是一本很好的参考书,因为它非常全面,可以放在您的书架上)。


谢谢你,Uday!
Radu GRIGore 2012年

我也很高兴来到这里。这是非常好的资源!
Uday Reddy'3

怎么样:《过渡与树木:结构操作语义学导论》(来自HansHüttel,2010年)。似乎有很多评论,但这里没有人提及。
Arturo Hernandez

1
@Uday:谢谢您的回答。“对编程语言概念进行建模”和“语义的基础方面”是什么意思?他们有什么区别和关系?
蒂姆

1
@Tim:要给出一种编程语言的语义,您需要某种形式的数学结构,例如最简单的情况下的集合,但是复杂的结构(例如域,类别,合并代数等)用于解决集合无法处理的问题。我所说的“基础方面”是指这些更复杂的结构的理论。在前一种情况下,重点是编程语言,在后一种情况下,重点是数学基础。
Uday Reddy 2014年

8

当我学习语义学本科课程时,我真的很喜欢阅读Winskel。不过,我不知道它是否过时,因为我不从事该领域的研究。Winskel的一个优点是,您可以找到英语以外的其他语言版本。

为了获得更多的阅读,以及更多的研究生水平,我建议约翰·米切尔(John Mitchell)着书 《编程语言编程语言概念》。如果您仅阅读第一章,我想它们也可以满足您的简洁要求。

您将找不到这些书的免费草稿,因此,如果预算有限,请选择Radu的答案中的“可能”。


6

好吧,我不是该主题的专家,但是我可以提供一些一般性的建议。

首先,有些人已经读过这本书并对其进行了评论。例如,对于Winskel的《编程语言的形式语义学》(参见[1][2]),我在亚马逊上找到了评论。

一份评论的一部分内容为:

从一开始,这本书就在语法和语义之间造成混淆,就像将文字与其值分开一样。没有使用特殊符号来区分它们。这是作者应在此类主题中解决的关键问题。此外,他使用的其他一些符号也很混乱,例如显示前提和结论。

作者似乎以为您具备所有必要的先决条件,因为他在前几章中非常简要地解释了背景资料(即集合论,操作语义,归纳,归纳定义)。作者在引言中使用的样式是放置两到三个段落,然后放置一些公式然后进行练习。对我来说,这真令人沮丧...

18/20人认为此评论有用。您可以搜索亚马逊(或其他来源)以查看更多评论。

其次,亚马逊与本书一起为计算机科学家提供了类型和编程语言以及基本类别理论。在另一个主题上,戴夫·克拉克(Dave Clarke)将这些书作为“类型系统和编程语言语义学”的优秀书籍提供。同样,我不是专家,但是这些对您可能有用。


TaPL对于我的口味来说太慢了。这是一本好书,但是我之所以提到这一点,是因为询问的人似乎担心“长篇大论”的书。
Radu GRIGore 2010年

@Radu:TAPL当然很慢,但这是一个很好的介绍。您在链接中提到的Harper书走得更快,并且涵盖了更多领域,尽管尚未完成。
戴夫·克拉克2010年

4
亚马逊对Winskel的书进行一点点评论。它通常在本科生语义课程中用作推荐文本,并可能吸引心怀不满的学生。我读过这本书,发现介绍性章节绰绰有余。他的表达方式似乎也完全是标准的。
Dominic Mulligan '12


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.