版权归原作者所有,如有侵权,请联系我们

[科普中国]-编程语言理论

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

编程语言理论(PLT)是计算机科学的一个分支,涉及编程语言及其各自特征的设计,实现,分析,表征和分类。 它属于计算机科学学科,既依赖于并影响数学,软件工程,语言学甚至认知科学。 它是一个公认的计算机科学分支,也是一个活跃的研究领域,其成果发表在许多致力于PLT的期刊以及一般的计算机科学和工程出版物上。

历史在某些方面,编程语言理论的历史甚至早于编程语言本身的发展。由Alonzo Church和Stephen Cole Kleene在20世纪30年代开发的lambda演算被一些人认为是世界上第一种编程语言,尽管它旨在模拟计算而不是程序员向计算机系统描述算法的手段。 。许多现代函数式编程语言被描述为在lambda演算上提供“薄单板”,并且很多都很容易用它来描述。

将要发明的第一种编程语言是Plankalkül,它由Konrad Zuse在20世纪40年代设计,但直到1972年才公开(直到1998年才实现)。第一个广为人知且成功的高级编程语言是Fortran,由John Backus领导的IBM研究团队于1954年至1957年间开发。 FORTRAN的成功促成了科学家委员会的成立,以开发“通用”计算机语言;他们努力的结果是ALGOL 58.另外,麻省理工学院的John McCarthy开发了Lisp编程语言(基于lambda演算),这是学术界起源于成功的第一种语言。随着这些初步努力的成功,编程语言成为20世纪60年代及以后的一个活跃的研究课题。从那时起编程语言理论史上的其他一些重要事件:

20世纪50年代Noam Chomsky在语言学领域发展了乔姆斯基的等级制度;这一发现直接影响了编程语言理论和计算机科学的其他分支。

20世纪60年代Simula语言由Ole-Johan Dahl和Kristen Nygaard开发;它被广泛认为是面向对象编程语言的第一个例子; Simula还介绍了协同程序的概念。

1964年,Peter Landin是第一个意识到Church的lambda演算可用于编程编程语言的人。他介绍了“解释”lambda表达式的SECD机器。

1965年,兰丁引入了J算子,基本上是一种延续形式。

1966年,Landin在他的文章The Next 700 Programming Languages中介绍了ISWIM,一种抽象的计算机编程语言。它在导致Haskell编程语言的语言设计中具有影响力。

1966年,CorradoBöhm介绍了编程语言CUCH(Curry-Church)。

1967年,克里斯托弗·斯特拉希(Christopher Strachey)发表了他有影响力的一套讲座笔记“编程语言的基本概念”,介绍了术语R值,L值,参数多态和ad hoc多态。

1969年,J。Roger Hindley发表了“组合逻辑中对象的主体类型 - 方案”,后来推广到了Hindley-Milner型推理算法。

1969年,Tony Hoare介绍了Hoare逻辑,这是一种公理语义。

1969年,威廉·艾尔文·霍华德(William Alvin Howard)观察到,一种称为“自然演绎”的“高级”证明系统可以直接在其直觉主义版本中被解释为计算模型的类型变体,称为lambda演算。这被称为库里 - 霍华德的对应。

20世纪70年代1970年,达纳斯科特首次发表他关于指称语义学的着作。

1972年,开发了逻辑编程和Prolog,从而允许计算机程序表达为数学逻辑。

1974年,John C. Reynolds发现了F系统。它已经由数学逻辑学家Jean-Yves Girard于1971年发现。

从1975年开始,Gerald Jay Sussman和Guy Steele开发了Scheme编程语言,一种包含词法范围的Lisp方言,一个统一的命名空间,以及来自演员模型的元素,包括一流的延续。

Backus在1977年的ACM图灵奖讲座中抨击了当前的工业语言状态,并提出了一类新的编程语言,称为功能级编程语言。

1977年,Gordon Plotkin介绍了编程可计算函数,这是一种抽象类型的函数式语言。

1978年,Robin Milner为ML编程语言引入了Hindley-Milner型推理算法。类型理论成为编程语言的一门学科,这种应用多年来在类型理论方面取得了巨大的进步。

20世纪80年代1981年,Gordon Plotkin发表了关于结构化操作语义的论文。

1988年,吉尔斯·卡恩(Gilles Kahn)发表了关于自然语义学的论文。

由Alan Kay领导的Xerox PARC的科学家团队开发了Smalltalk,这是一种以其创新开发环境而闻名的面向对象语言。

出现了过程计算,例如Robin Milner的通信系统微积分,以及C. A. R. Hoare的通信顺序过程模型,以及类似的并发模型,例如Carl Hewitt的演员模型。

1985年,米兰达的发布激发了对懒惰评估的纯函数式编程语言的学术兴趣。成立了一个委员会来定义一个开放的标准,导致1990年Haskell 1.0标准的发布。

Bertrand Meyer通过合同创建了方法设计,并将其合并到Eiffel编程语言中。

20世纪90年代Gregor Kiczales,Jim Des Rivieres和Daniel G. Bobrow出版了“元对象协议的艺术”一书。

Eugenio Moggi和Philip Wadler介绍了使用monads来构造用函数式编程语言编写的程序。

子学科和相关领域有几个研究领域,或者在编程语言理论中,或者对它有深远的影响;其中许多都有相当大的重叠。此外,PLT还利用了许多其他数学分支,包括可计算性理论,范畴理论和集合论1。

形式语义形式语义是计算机程序和编程语言行为的正式规范。描述计算机程序的语义或“含义”的三种常用方法是指称语义,操作语义和公理语义。

类型理论类型理论是类型系统的研究;这是“通过根据他们计算的价值种类对短语进行分类来证明某些程序行为缺失的易处理的句法方法”。许多编程语言的特征在于其类型系统的特征。

程序分析和转换程序分析是检查程序和确定关键特征(例如缺少程序错误类别)的一般问题。程序转换是将程序以一种形式(语言)转换为另一种形式的过程。

比较编程语言分析比较编程语言分析试图根据编程语言的特征将编程语言分为不同的类型;广泛的编程语言类别通常称为编程范例。

通用和元编程元编程是高阶程序的生成,其在执行时产生程序(可能以不同的语言或原始语言的子集)作为结果。

特定于域的语言特定于域的语言是为有效地解决特定问题域中的问题而构建的语言。

编译器构造编译理论是编写编译器的理论(或者更一般地说,是翻译者);将用一种语言编写的程序翻译成另一种形式的程序。传统上,编译器的操作分为语法分析(扫描和解析),语义分析(确定程序应该做什么),优化(通过某些度量标准提高程序性能;通常执行速度)和代码生成(在某种目标语言中生成和输出等效程序;通常是CPU的指令集)。

运行时系统运行时系统是指编程语言运行时环境及其组件的开发,包括虚拟机,垃圾收集和外部函数接口。

本词条内容贡献者为:

王慧维 - 副研究员 - 西南大学